首页 > 解决方案 > 尝试匹配字符串时的正则表达式困境

问题描述

这是 Delphi 10.3.3 IDE 的代码编辑器中的一行代码:

在此处输入图像描述

蓝色标识字符串常量:'ab''cd'

现在我尝试将以下主题中的字符串与正则表达式 (System.RegularExpressions) 进行匹配:

ThisString := 'ab''cd'{'};
OtherString := 'simple';
  1. 如果我使用 Regex '.*',那么我会在 RegexBuddy 4.10 中得到这个结果:

在此处输入图像描述

  1. 如果我使用这个其他正则表达式'.*?',那么我会得到这个结果:

在此处输入图像描述

您可以看到两个正则表达式都不匹配所需的正确结果。

如何解决这个困境?

标签: regexdelphidelphi-10.3-rio

解决方案


要获得示例数据的广泛匹配并仅获得匹配而不是组,您可以使用环视和否定字符类并重复匹配 2 个单引号。

(?:'[^']*')+(?=[^;]*;)

正则表达式演示

为了获得更精确的匹配,您可以使用空白边界的环视:

(?<!\S)(?:'[^']*')+(?=(?:{[^{}]+})?;(?!\S))

正则表达式演示

要匹配 1 个或多个重复对,您可以使用:

 (?:'[^']*')+

推荐阅读