特别是当^
表示“匹配开始”时,它在正则表达式中何时表示“不是以下”?
从维基百科的文章和其他参考资料中,我得出结论,它意味着前者在开始时和后者在括号中使用时,但程序如何处理插入符号在开头和括号中的情况?那么,^[b-d]t$
匹配什么?
答案 0 :(得分:70)
^
仅在[]
内部和开头时表示“不是以下”,因此[^...]
。
当它位于[]
内,但不时,它意味着实际的^
字符。
当它被转义(\^
)时,它也意味着实际的^
字符。
在所有其他情况下,它表示字符串/行的开头(哪一个取决于语言/设置)。
简而言之:
[^abc]
- >不是a,b或c [ab^cd]
- > a,b,^(字符),c或d \^
- >一个^
字符所以^[b-d]t$
表示:
答案 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 匹配,可以跨行。