^
据说与行的开头相匹配,但在"\n"
,"\r"
或{{之后不匹配1}}。但它匹配字符串的开头。它在什么意义上与一行的开头相匹配,它与"\r\n"
有什么不同?
\A
据说与一行匹配,但在$
,"\n"
或{{之前不匹配1}}。但它匹配字符串的结尾。它在什么意义上与一行的结尾相匹配,它与"\r"
有什么不同?
"\r\n"
与\z
不同,如果它位于字符串末尾,则会在\Z
之前匹配。在我看来,\z
和"\n"
是自然配对的概念,而\A
则是一个奇怪的概念。为什么\z
和\Z
被定义为原样,而不是相反?而且,您何时想使用\Z
?
你能举例说明以上内容吗? 如果语言/标准之间的差异很重要,列出它们会很有帮助。
答案 0 :(得分:4)
区别在于^
和$
锚点可以修改行为。
启用multiline
模式后,^
和$
锚点会断言一行的开头和结尾。
关闭multiline
模式后,^
和$
锚点会断言字符串的开头和结尾。
大多数正则表达式实现都具有multiline
模式。
使用Ruby,Perl或Javascript,它使用m
修饰符定义。例如/pattern/m
在.NET中,它在模式本身内部使用(?m)
定义,或者从RegexOptions.Multiline
枚举定义。
回答你的第3个问题......
\A
- 匹配必须出现在字符串的开头。
\Z
- 匹配必须发生在字符串的末尾或字符串末尾的\n
之前。
\z
- 匹配必须发生在字符串的末尾。
这三个是不受任何修饰符影响的常量。我同意\A
和\z
似乎是不合逻辑的配对。它对我来说也没有多大意义。但是,如果可能有一个您希望忽略的尾随换行符,则可能首选\Z
。