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