【问题标题】:What is the behaviour of $ in regex expressions?$ 在正则表达式中的行为是什么?
【发布时间】:2019-03-29 06:38:38
【问题描述】:

在正则表达式之间或多次使用 $ 时的行为是什么?根据Regex Wiki "$" 应该匹配行尾。我可以在正则表达式中多次使用 $ 来匹配后续行吗?

考虑以下正则表达式:

^(a$|b)(c)$

为什么上面的正则表达式不匹配字符串“a\nc\n”。你可以在https://regexr.com/4b84o查看。

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

【问题讨论】:

  • 你没有启用多行标志,所以$ 只匹配字符串的结尾。您也从未匹配ac 之间的换行符
  • 即使启用了多行标志,它也不匹配。更新了链接上的正则表达式以匹配多行。
  • 匹配“a\nc\n”和“bc\n”的正则表达式是什么?我是正则表达式的新手,请合理地解释您的反对意见,以便如果觉得不必要,我会删除该问题。

标签: regex nested eol


【解决方案1】:

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

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

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

那么(a$|b)(c)$ 的意思是:

会有一个a,这将是行尾,或者b。之后,有一个cc 也是行尾。

这是自相矛盾的,因为如果a 在行尾,后面会有一个换行符(或根本没有),所以不可能有c。因此,您的正则表达式不会匹配任何内容。

改用\n 字符:

(a\n|b)c\n

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2015-06-09
    • 2013-04-07
    相关资源
    最近更新 更多