我正在用 解析字符串TRegExpr
。表达式如下:
(.*$)
这意味着它应该找到整个字符串,但是当我使用 command 找到它之后,它会找到空字符串,但是由于符号ExecNext
,该行已经结束。$
有人可以解释这种行为吗?
默认情况下,正则表达式.
(点)不匹配换行符。如果您输入有换行符,您会看到这种行为。
尝试这个:
(?s)(.*$)
该表达式(?s)
为正则表达式的其余部分打开“点匹配换行符”。
那是因为*
量词。它将匹配之前出现的 0 个或多个字符。0 次出现意味着它将匹配空字符串。
一个锚点$
,一个零宽度的断言。它不匹配字符串的结尾,它匹配字符串结尾之前的位置(或字符串中最后一个字符的换行符之前)。
那么会发生什么?
您的正则表达式首先匹配字符串,直到字符串结尾。
正则表达式引擎的位置在最后一个字符之后,但在字符串结尾之前。当您现在调用时ExecNext
,它匹配字符串结尾之前的空字符串。
如果你想避免这种情况,请使用+
量词,它需要至少一个字符来匹配 ==>.+$
只会找到一个匹配项。