regex - Delphi正则表达式中INSIDE LOOKBEHIND内的变量重复?
问题描述
我假设 Delphi 的System.RegularExpressions中使用的 Regex 方言是PCRE。(我使用德尔福 Rio 10.3.3)
RegexBuddy 用这个正则表达式给我一个警告(使用 PCRE 时):
(?<!('.*))\{.*?\}
PCRE 库不支持在lookbehind 内重复变量
这是我试图匹配的示例数据:
ThisString := ' ab{comment inside a string}yz ';
有没有办法在 Delphi Rio 10.3.3 的正则表达式中使用变量重复?
解决方案
在 PCRE 中(以及在使用 PCRE 的 Delphi 中),您可以使用它\K
来解决后视的限制。您问题中的正则表达式可以这样重写:
(?m)(^|\G)[^'\v]*?\K\{.*?\}
RegexBuddy 4.10.0 完全支持 Delphi 10.3。10.3.0 和 10.3.3 之间的正则表达式支持没有区别。
如果你想在 Delphi 中匹配字符串和注释,你最好使用一个简单的正则表达式来分别匹配它们。此正则表达式有 3 个单独的替代项来匹配字符串、注释或替代注释:
(?<string>'[^'\v]*+')|(?<comment>\{[^}]*+\})|(?<altcomment>(?m)\(\*.*?\*\))
编写一些 Delphi 代码来迭代此正则表达式的匹配项,并根据 3 个捕获组中的哪一个匹配,将匹配项作为字符串、注释或替代注释处理或跳过。
推荐阅读
- matlab - 简单函数中的输出参数太多
- java - 从文件上传 Java FX 图像
- python - 对真实数据集的 OCR 预测不佳
- xamarin.forms - OnApearing() 方法未在 xamarin 表单的 Mater 详细信息页面中第二次触发
- ffmpeg - FFmpeg CRF 的工作原理
- python - Twilio:将记录转录成文本(python)
- azure - 如何防止 Azure 流分析作业读取不完整的文件
- oracle - 找出 oracle 表的加载机制
- react-native - React Native 在 TextInput 中禁用键盘但允许光标
- php - Symfony/Doctrine/authentication,我无法恢复角色