【发布时间】:2019-12-05 15:03:22
【问题描述】:
我需要查找缺少raise 关键字的某些代码块,如下所示:
这些是我正在搜索的匹配类型
except
FreeAndNil(result);
end;
虽然这些应该忽略:
except
FreeAndNil(result);
raise;
end;
请记住,except 和 end; 关键字之间可能有任何类型或长度的文本。
我尝试了以下正则表达式:except((?!raise).)*end;,但它不适用于多行场景。
【问题讨论】:
-
如果可以选择让点匹配换行符,您可以使用您的模式 regex101.com/r/puLnO6/1 或者可能使用内联修饰符
(?s)except((?!raise).)*end;或except((?!raise)[\s\S])*end; -
你也可以匹配换行符而不是
except\s*\n(?:(?![\t ]*\b(?:except|raise;)$).*\n)*end;regex101.com/r/Wx2bGx/1 -
@bobblebubble 我找到了this page,所以我认为确实如此,但我不太确定,因为我没有使用 delphi 的经验。这是你建议的一个很好的模式,甚至更少的步骤。
-
@bobblebubble 我认为您甚至可以将其缩短为 except\s*(?:\R.*)*?\R\s*(?:end|raise(*SKIP)(*F)); 如果它支持 PCRE,您也应该发布它:)
-
@Thefourthbird 确实!不知道为什么我把它放在周围!谢谢:)
标签: regex parsing delphi regex-lookarounds