行结束$
匹配,即使匹配字符串中有额外的结尾\n
,因此我们使用\Z
代替$
例如
^\w+$
将匹配字符串abcd\n
,但^\w+\Z
不是
\A
以及何时使用?
答案 0 :(得分:23)
通常在启用多行匹配时使用它。由于\A
仅匹配整个文本的开头,而不仅仅是一行开头,因此在可以跨行匹配的正则表达式中,^
和\A
的功能不同。
答案 1 :(得分:4)
与任何正则表达式功能一样,您可以在更准确地描述所需内容时使用它,而不是任何更一般的功能。如果您知道要在字符串的开头准确匹配(而不是逻辑行),请使用描述该字符串的正则表达式功能。不要使用在您不想要的情况下可能匹配的正则表达式功能。
对于Perl,请参阅perlre文档以获取有关零宽度断言的详细信息:
\b Match a word boundary
\B Match except at a word boundary
\A Match only at beginning of string
\Z Match only at end of string, or before newline at the end
\z Match only at end of string
\G Match only at pos() (e.g. at the end-of-match position
of prior m//g)
答案 2 :(得分:2)
根据您使用的标签与您的问题没有直接关系,但至少有一种语言(Ruby)^
和$
总是意味着开始/结束-of-line,因此,如果您想匹配字符串的开头/结尾, 使用\A
和\Z
或\z
。
如果您想保持正则表达式的可移植性,最好明确说明您希望他们做什么,而不是依赖于\m
或Regex.MULTILINE
等模式修饰符的可用性。
另一方面,JavaScript,POSIX和XML不支持\A
和\Z
。这就像RegexBuddy这样的工具派上用场,可以将正则表达从一种口味转换为另一种口味。
答案 3 :(得分:2)
如果您正在使用的正则表达式支持\A
,那么我建议您始终使用它而不是^
。 \A
始终只在支持它的所有风格中匹配字符串的开头。换行没有问题。
^
可能只匹配字符串的开头或任何行的开头,具体取决于正则表达式的风格和正则表达式选项。
通过使用\A
,当其他人必须维护您的代码时,您可以减少混淆的可能性。