1

我正在用 解析字符串TRegExpr。表达式如下:

(.*$)

这意味着它应该找到整个字符串,但是当我使用 command 找到它之后,它会找到空字符串,但是由于符号ExecNext,该行已经结束。$

有人可以解释这种行为吗?

4

2 回答 2

2

默认情况下,正则表达式.(点)不匹配换行符。如果您输入有换行符,您会看到这种行为。

尝试这个:

(?s)(.*$)

该表达式(?s)为正则表达式的其余部分打开“点匹配换行符”。

于 2012-10-01T12:49:53.667 回答
2

那是因为*量词。它将匹配之前出现的 0 个或多个字符。0 次出现意味着它将匹配空字符串。

一个锚点$,一个零宽度的断言。它不匹配字符串的结尾,它匹配字符串结尾之前的位置(或字符串中最后一个字符的换行符之前)。

那么会发生什么?

  1. 您的正则表达式首先匹配字符串,直到字符串结尾。

  2. 正则表达式引擎的位置在最后一个字符之后,但在字符串结尾之前。当您现在调用时ExecNext,它匹配字符串结尾之前的空字符串。

如果你想避免这种情况,请使用+量词,它需要至少一个字符来匹配 ==>.+$只会找到一个匹配项。

于 2012-10-01T12:50:58.047 回答