正则表达式中$的行为是什么?

时间:2019-03-29 06:38:38

标签: regex nested eol

在正则表达式中两次或多次使用$时的行为是什么?根据{{​​3}},“ $”应与行尾匹配。我可以在正则表达式中多次使用$来匹配后续行吗?

考虑以下正则表达式:

^(a$|b)(c)$

为什么上面的正则表达式不匹配字符串“ a \ nc \ n”。您可以在Regex Wiki上进行检查。

一旦到达“ a \ n”并且因此未验证“ c \ n”,则正则表达式似乎停止验证,而是将其用于下一个要匹配的字符串。正则表达式不能验证多行吗? $是表示行尾(即\ n字符)还是与要匹配的字符串的末尾匹配?

1 个答案:

答案 0 :(得分:1)

首先,您没有启用m标志,因此$匹配字符串的结尾。

即使您启用了m标志,正则表达式仍然不匹配。

这是因为$仅匹配行尾的位置,即,它是0长度的匹配项,而不是换行符\n。要匹配换行符,请使用\n

所以(a$|b)(c)$在说的是:

  

将有一个a,它将在该行的末尾,即b。之后,有一个cc也是行尾。

这是自相矛盾的,因为如果a位于行尾,则其后将有一个新的行字符(或根本没有),因此不能有c 。因此,您的正则表达式将不匹配任何内容。

请改用\n字符:

(a\n|b)c\n
相关问题