^
据说匹配行首 ,但它在 "\n"
之后不匹配, "\r"
或 "\r\n"
.不过,它匹配字符串的开头。它在什么意义上匹配行首,它与 \A
有何不同? ? $
据说匹配行尾 ,但它在 "\n"
之前不匹配, "\r"
或 "\r\n"
.但是,它匹配字符串的结尾。它在什么意义上匹配行尾,它与 \z
有何不同? ? \Z
,不像 \z
, 匹配在 "\n"
之前如果那是在字符串的末尾。在我看来 \A
和 \z
是自然配对的概念,和\Z
是一个奇怪的。为什么会这样\Z
和 \z
按原样定义,而不是相反?并且,您想什么时候使用 \Z
? 你能用例子来说明上面的内容吗?
如果语言/标准之间的差异很重要,列出它们会很有帮助。
最佳答案
不同的是^
和 $
anchor 可以有修改的行为。
与 multiline
模式开启,^
和 $
anchor 断言行的开头和结尾。
与 multiline
模式关闭,^
和 $
anchor 断言字符串的开头和结尾。
大多数正则表达式实现都有 multiline
模式。
对于 Ruby、Perl 或 Javascript,它是用 m
定义的。修饰符。例如/pattern/m
在 .NET 中,它定义为 (?m)
在模式本身内部,或来自 RegexOptions.Multiline
枚举。
回答你的第三个问题...\A
- 匹配必须出现在字符串的开头。\Z
- 匹配必须出现在字符串的末尾或之前 \n
在字符串的末尾。\z
- 匹配必须出现在字符串的末尾。
这三个是不受任何修饰符影响的常量。我同意 \A
和 \z
似乎是不合逻辑的配对。对我来说也没有多大意义。但是,如果您可能有想要忽略的尾随换行符,则 \Z
可能是首选。
关于regex - 正则表达式 anchor list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451453/