$ 在正则表达式中的行为是什么?
What is the behaviour of $ in regex expressions?
在正则表达式中两次或多次使用 $ 时,$ 的行为是什么?根据 Regex Wiki "$" 应该匹配行尾。我可以在正则表达式中多次使用 $ 来匹配后续行吗?
考虑以下正则表达式:
^(a$|b)(c)$
为什么上面的正则表达式不匹配字符串"a\nc\n"。您可以在 https://regexr.com/4b84o.
查看相同内容
一旦达到 "a\n",正则表达式似乎就会停止验证,因此 "c\n" 不会被验证,但会被用于下一个要匹配的字符串。正则表达式不验证多行吗? $ 表示行尾(即 \n 字符)还是匹配要匹配的字符串的结尾?
首先,您没有启用 m
标志,因此 $
匹配字符串的结尾。
即使您启用了 m
标志,正则表达式仍然不会匹配。
这是因为$
只匹配行尾的位置即是0长度匹配,不是换行字符\n
.要匹配换行符,请使用 \n
.
所以 (a$|b)(c)$
说的是:
There will be an a
and that will be the end of the line, or b
. After that, there is a c
. And c
is the end of a line as well.
这是自相矛盾的,因为如果 a
在行尾,它后面会有一个换行符(或者什么都没有),所以不可能有 c
.因此,您的正则表达式不会匹配任何内容。
改用 \n
字符:
(a\n|b)c\n
在正则表达式中两次或多次使用 $ 时,$ 的行为是什么?根据 Regex Wiki "$" 应该匹配行尾。我可以在正则表达式中多次使用 $ 来匹配后续行吗?
考虑以下正则表达式:
^(a$|b)(c)$
为什么上面的正则表达式不匹配字符串"a\nc\n"。您可以在 https://regexr.com/4b84o.
查看相同内容一旦达到 "a\n",正则表达式似乎就会停止验证,因此 "c\n" 不会被验证,但会被用于下一个要匹配的字符串。正则表达式不验证多行吗? $ 表示行尾(即 \n 字符)还是匹配要匹配的字符串的结尾?
首先,您没有启用 m
标志,因此 $
匹配字符串的结尾。
即使您启用了 m
标志,正则表达式仍然不会匹配。
这是因为$
只匹配行尾的位置即是0长度匹配,不是换行字符\n
.要匹配换行符,请使用 \n
.
所以 (a$|b)(c)$
说的是:
There will be an
a
and that will be the end of the line, orb
. After that, there is ac
. Andc
is the end of a line as well.
这是自相矛盾的,因为如果 a
在行尾,它后面会有一个换行符(或者什么都没有),所以不可能有 c
.因此,您的正则表达式不会匹配任何内容。
改用 \n
字符:
(a\n|b)c\n