【发布时间】:2020-03-07 15:12:23
【问题描述】:
我正在研究 Mastering Regular Expressions, 3rd Edition 的正则表达式,我发现 $ 比 ^ 复杂一点,这让我感到惊讶,因为我认为他们是“对称的”,除非它们被转义为它们的字面对应物。
事实上,在第129页,他们的描述略有不同,更多的词是支持$;但是我仍然对此感到困惑。
- 关于
^,只描述了两个明确的替代方案:
Caret
^匹配正在搜索的文本的开头,如果处于增强的行锚模式,则匹配任何换行符之后。 [...]$[...] 匹配
- 关于
$,我的描述比较模糊:
$[...] 匹配目标字符串的末尾以及 string-ending 换行符之前。后者很常见,允许像s$这样的表达式(表面上,匹配“以s结尾的行”)来匹配…s<NL>,以s结尾的行以换行符结尾。
$的另外两个常见含义是仅匹配目标文本的末尾,以及匹配任何换行符之前。
后两个含义似乎与^ 中描述的含义相当对称,但是字符串结尾的换行符 的含义呢?
目前搜索[regex] "string-ending newline"只给出one、two和three的结果,而且都是参考
$匹配字符串的结束位置或字符串结束换行符之前的位置。在基于行的工具中,它匹配任何行的结束位置。
【问题讨论】:
-
这本书一般是关于正则表达式的,但它主要关注 Perl,因此我的问题中的标签。鉴于下一页上的表格,我认为该文本适用于 Perl(以及其他语言,但不适用于
awk)。 -
好的,如果你使用 perl,你可以使用
\z来匹配字符串的结尾,\Z来匹配结尾或者结尾处的换行符之前。 perl 中的$受m//或qr//的m标志的约束。
标签: regex perl newline eol dollar-sign