75

具体来说,什么时候^表示“匹配开始”,什么时候表示正则表达式中的“不是以下”?

从 Wikipedia 文章和其他参考资料中,我得出的结论是,前者在开头,后者与括号一起使用,但程序如何处理插入符号位于开头和括号的情况?什么,说,^[b-d]t$匹配?

4

2 回答 2

161

^仅在 , 的内部和开头表示“不是以下” [],所以[^...].

当它在里面[]不是在开始时,它意味着实际的^角色。

当它被转义时(\^),它也意味着实际的^字符。

在所有其他情况下,它意味着字符串/行的开始(取决于语言/设置)。

简而言之:

  • [^abc]-> 不是 a、b 或 c
  • [ab^cd]-> a、b、^(字符)、c 或 d
  • \^-> 一个^字符
  • 其他任何地方 -> 字符串/行的开头。

所以^[b-d]t$意味着:

  • 线的开始
  • b/c/d 字符
  • 字符
  • 行结束
于 2013-06-05T15:56:19.300 回答
0

要忽略块评论?好的,这^\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*当然可以,但它匹配了许多可以跨行的不必要的杂物。

于 2019-11-17T16:36:23.053 回答