正则表达式中的插入符号

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

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

64623 次浏览

[]的内部和开始时,^仅意味着“不是下面的”,所以 [^...]

当它在 []中而在 没有开始时,它表示实际的 ^字符。

当它被转义时(\^) ,它也表示实际的 ^字符。

在所有其他情况下,它意味着字符串/行的开始(其中一个是依赖于语言/设置的)。

简而言之:

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

所以 ^[b-d]t$的意思是:

  • 开始排队
  • B/c/d 字符
  • 字母 t
  • 到此为止

要忽略块注释吗?好的,这个 ^\s*可能不好,因为 \s可以跨线。看看 Dot-net 是否支持水平空格 \h,如果不支持 [^\S\r\n]也可以。可以使用多行内联修饰符 (?m)(或 RegexOptions.Multiline)。这将 ^的含义改为表示行的开头,而不是字符串的开头(默认值)。所以最后是 (?m)^\h*(#)。俘虏小组应该告诉我们位置。如果不是,这也是 (?m)(?<=^\h*)#,匹配的位置是偏移量。

请参阅完整的正则表达式信息 https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference

请注意,^\s*当然可以工作,但是它匹配了很多不必要的 克鲁夫特,这些 克鲁夫特可以跨行。