正则表达式中的插入符号

时间:2013-06-05 15:50:20

标签: regex caret

特别是当^表示“匹配开始”时,它在正则表达式中何时表示“不是以下”?

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

2 个答案:

答案 0 :(得分:70)

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

当它位于[]内,但时,它意味着实际的^字符。

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

在所有其他情况下,它表示字符串/行的开头(哪一个取决于语言/设置)。

简而言之:

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

所以^[b-d]t$表示:

  • 行首
  • b / c / d character
  • t character
  • 行尾

答案 1 :(得分:2)

我正在回答这个问题Meaning of caret depending on the context
由WiktorStribiżew标记为完全相同的副本11/16/2019
Carets in Regular Expressions

要忽略块注释吗?好的,此^\s*可能很糟糕,因为\s可以跨越行。查看点网是否支持水平空白\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 匹配,可以跨行。