Regex 尝试匹配字符串时正则表达式的困境

Regex 尝试匹配字符串时正则表达式的困境,regex,delphi,delphi-10.3-rio,Regex,Delphi,Delphi 10.3 Rio,这是Delphi 10.3.3 IDE的代码编辑器中的一行代码: 蓝色表示字符串常量:'ab''cd' 现在,我尝试将以下主题中的字符串与正则表达式(System.RegularExpressions)匹配: 如果我使用Regex“.*”,那么我会在RegexBuddy 4.10中得到这个结果: 如果我使用另一个正则表达式“.*?”,则得到以下结果: 您可以看到这两个正则表达式都与所需的正确结果不匹配 如何解决这个难题?要获得示例数据的广泛匹配,并仅获得匹配而不是组,您可以使用lookar

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

蓝色表示字符串常量:
'ab''cd'

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

  • 如果我使用Regex
    “.*”
    ,那么我会在RegexBuddy 4.10中得到这个结果:
  • 如果我使用另一个正则表达式“.*?”,则得到以下结果:
  • 您可以看到这两个正则表达式都与所需的正确结果不匹配


    如何解决这个难题?

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

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

    要获得更精确的匹配,可以对空白边界使用lookarounds:

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

    你是说像这样吗<代码>(?:'[^\s']+')+(?:{'})或类似的
    '[^{}]+'(?:{[^{}]+})这与字符串不完全匹配:您是否只想匹配
    'ab''cd'
    ?是的,正如我在问题中所问的。这将匹配那些stings,或者您可以使用捕获组来确保存在
    在末尾
    ((?:'[^\s']+')+)[^\s;]*;(?!\S)
    两个正则表达式与此字符串不匹配:
    此字符串:='ab''cd'{}
    在这种情况下,您可以从模式中省略
    \s
    ,只有当字符串中有零对或无限多对单引号时,它才应该匹配。奇怪的是,我发现这个正则表达式似乎工作正常:
    (?:'[^\s']*'))+
    但如果字符串中的单引号后面或前面有空格,则该正则表达式不正确。但是,如果字符串(=单引号边界之间)包含任何空格,则该正则表达式也不起作用。这意味着这不匹配:
    OtherString:=“si mple”
    (?<!\S)(?:'[^']*')+(?=(?:{[^{}]+})?;(?!\S))
    
     (?:'[^']*')+