Delphi TRegEx零长度

时间:2013-09-18 15:10:31

标签: regex delphi

我希望匹配

的'('和')'之间的内容
Path()
Path(C:\...)

(?<=^Path\()(.*)(?=\))

在Notepad ++中,它匹配''&lt; - 零长度匹配和'C:...'。 但是使用Delphi XE3:

if TRegEx.IsMatch(pDef, '(?<=^Path\()(.*)(?=\))') then begin

只匹配'C:\ ...',但我需要空匹配。

2 个答案:

答案 0 :(得分:0)

尝试使用该正则表达式:

Path\((.*)\)

这也匹配空匹配,如您的示例所示。
Online Demo

答案 1 :(得分:0)

Delphi的TRegEx跳过所有零长度匹配。有关详细信息,请参阅QC104562

如果从TPerlRegEx属性中排除preNotEmpty,您的正则表达式将与Delphi的State一起使用。

也就是说,使用环视试图隔离正则表达式匹配的一部分导致低效的正则表达式。使用Path\(([^)\r\n]*)\)Path\((.*)\)之类的东西要好得多,并检索第一个捕获组匹配的文本以获取实际路径。如果同一行中有其他Path(...)个字符,但第一个正则表达式将正确匹配),但无法正确处理包含)个字符的路径。