如何在正则表达式匹配结果中执行二次正则检索?
正则匹配结果的二次检索方案
当然可以在第一次正则的匹配结果中再次执行正则检索,两种实用思路如下:
1. 分步处理
- 先用第一个正则提取目标片段:
这段正则会抓取所有带(?i)((function|procedure)+(.+?(?=stdcall)))stdcall的函数/过程定义前缀部分。 - 对每一段提取出的内容,用第二个正则匹配筛选:
只保留包含(.+?(?=((\s)|(\:))String))String(排除AnsiString这类变体)的片段。
2. 合并正则,一次性匹配
把两个条件整合到一个正则里,直接定位符合要求的完整定义,无需分步处理:
(?i)(function|procedure).+?(?<!Ansi)String.+?stdcall
正则逻辑说明
(?i):忽略大小写匹配(function|procedure):匹配函数或过程关键字.+?(?<!Ansi)String:匹配到String,且前面不能是Ansi(避免误匹配AnsiString).+?stdcall:确保代码片段包含stdcall关键字
匹配效果
- 成功匹配的目标代码:
Function Test(aTest: String; const aPluginCall: TObject): integer; stdcall; export; - 会被跳过的代码:
Function Test(aTest: AnsiString; const aPluginCall: TObject): integer; stdcall; export;Function Test: integer; stdcall; export;
内容的提问来源于stack exchange,提问作者Fanclon
相关产品推荐
相关产品推荐

