在正则表达式中两次或多次使用$时的行为是什么?根据{{3}},“ $”应与行尾匹配。我可以在正则表达式中多次使用$来匹配后续行吗?
考虑以下正则表达式:
^(a$|b)(c)$
为什么上面的正则表达式不匹配字符串“ a \ nc \ n”。您可以在Regex Wiki上进行检查。
一旦到达“ a \ n”并且因此未验证“ c \ n”,则正则表达式似乎停止验证,而是将其用于下一个要匹配的字符串。正则表达式不能验证多行吗? $是表示行尾(即\ n字符)还是与要匹配的字符串的末尾匹配?
答案 0 :(得分:1)
首先,您没有启用m
标志,因此$
匹配字符串的结尾。
即使您启用了m
标志,正则表达式仍然不匹配。
这是因为$
仅匹配行尾的位置,即,它是0长度的匹配项,而不是换行符\n
。要匹配换行符,请使用\n
。
所以(a$|b)(c)$
在说的是:
将有一个
a
,它将在该行的末尾,即b
。之后,有一个c
。c
也是行尾。
这是自相矛盾的,因为如果a
位于行尾,则其后将有一个新的行字符(或根本没有),因此不能有c
。因此,您的正则表达式将不匹配任何内容。
请改用\n
字符:
(a\n|b)c\n