Regex 尝试匹配字符串时正则表达式的困境
这是Delphi 10.3.3 IDE的代码编辑器中的一行代码: 蓝色表示字符串常量: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
'ab''cd'
现在,我尝试将以下主题中的字符串与正则表达式(System.RegularExpressions)匹配:
“.*”
,那么我会在RegexBuddy 4.10中得到这个结果:如何解决这个难题?要获得示例数据的广泛匹配,并仅获得匹配而不是组,您可以使用lookarounds和否定字符类,并重复匹配2个单引号
(?:'[^']*')+(?=[^;]*;)
要获得更精确的匹配,可以对空白边界使用lookarounds:
(?<!\S)(?:'[^']*')+(?=(?:{[^{}]+})?;(?!\S))
你是说像这样吗<代码>(?:'[^\s']+')+(?:{'})代码>或类似的
'[^{}]+'(?:{[^{}]+})代码>这与字符串不完全匹配:您是否只想匹配'ab''cd'
?是的,正如我在问题中所问的。这将匹配那些stings,或者您可以使用捕获组来确保存在代码>在末尾((?:'[^\s']+')+)[^\s;]*;(?!\S)
两个正则表达式与此字符串不匹配:此字符串:='ab''cd'{}
在这种情况下,您可以从模式中省略\s
,只有当字符串中有零对或无限多对单引号时,它才应该匹配。奇怪的是,我发现这个正则表达式似乎工作正常:(?:'[^\s']*'))+
但如果字符串中的单引号后面或前面有空格,则该正则表达式不正确。但是,如果字符串(=单引号边界之间)包含任何空格,则该正则表达式也不起作用。这意味着这不匹配:OtherString:=“si mple”
(?<!\S)(?:'[^']*')+(?=(?:{[^{}]+})?;(?!\S))
(?:'[^']*')+