0

我想匹配 '(' 和 ')' 之间的内容

Path()
Path(C:\...)

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

在 Notepad++ 中,它匹配 '' <-- 零长度匹配和 'C:...'。但使用德尔福 XE3:

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

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

4

2 回答 2

0

尝试使用该正则表达式:

Path\((.*)\)

这也匹配空匹配,如您的示例所示。
在线演示

于 2013-09-18T15:16:29.147 回答
0

Delphi 会TRegEx跳过所有长度为零的匹配项。详见QC104562

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

也就是说,使用环视来尝试隔离正则表达式匹配的一部分会导致正则表达式效率低下。更好地使用类似Path\(([^)\r\n]*)\)or的东西Path\((.*)\)并检索与第一个捕获组匹配的文本以获取实际路径。Path(...)当同一行上有其他字符时,第一个正则表达式将正确匹配,)但不会正确处理包含)字符的路径。

于 2013-09-21T00:38:37.530 回答