正则表达式中的插入符号
Posted
技术标签:
【中文标题】正则表达式中的插入符号【英文标题】:Carets in Regular Expressions 【发布时间】:2013-06-01 09:57:09 【问题描述】:具体来说,^
什么时候表示“匹配开始”,什么时候表示正则表达式中的“不是以下”?
从 Wikipedia 文章和其他参考资料中,我得出的结论是,前者在开头,后者在与括号一起使用时,但程序如何处理插入符号位于开头和括号的情况?例如,^[b-d]t$
匹配什么?
【问题讨论】:
【参考方案1】:^
仅在[]
的内部和开头表示“不是以下”,所以[^...]
。
当它在[]
内部但不是开头时,它表示实际的^
字符。
当它被转义时(\^
),它也意味着实际的^
字符。
在所有其他情况下,它表示字符串/行的开头(取决于语言/设置)。
简而言之:
[^abc]
-> 不是 a、b 或 c
[ab^cd]
-> a、b、^(字符)、c 或 d
\^
-> ^
字符
其他任何地方 -> 字符串/行的开头。
所以^[b-d]t$
的意思是:
【讨论】:
回答得很好。When it's inside [] but not at the start, it means the actual ^ character.
Java 中的不同可能性。
In all other cases it means start of the string / line (which one is language / setting dependent).
这不是真正的依赖,其含义是特定于正则表达式引擎的,它们在这方面大多相同。
[^\^]
不是克拉!【参考方案2】:
要忽略块 cmets 吗?好的,这个^\s*
可能不好,因为\s
可以跨行。看看 Dot-net 是否支持水平空格 \h
如果不支持 [^\S\r\n]
也可以。可以使用多行内联修饰符(?m)
(或RegexOptions.Multiline
)。这将 ^
的含义更改为表示行的开头而不是字符串的开头(默认值)。所以,它最终是(?m)^\h*(#)
。捕获组应该告诉位置。如果不是,这也是(?m)(?<=^\h*)#
,匹配的位置就是偏移量。
查看完整的正则表达式信息https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference
请注意,^\s*
当然可以,但它匹配了许多可以跨行的不必要的cruft。
【讨论】:
以上是关于正则表达式中的插入符号的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Atom 中使用正则表达式在文本字符串中插入符号(Mac OS)