Regex用于匹配引号和单引号
本文关键字:单引号 用于 Regex | 更新日期: 2023-09-27 17:59:19
我目前正在为ColdFusion代码编写一个解析器。我使用正则表达式(在c#中)来提取cfquery标记的名称数据源属性。
目前,正则表达式如下<cfquery's.*datasource's*='s*(?:'|")(.*)(?:'|")
它适用于像这样的字符串<cfquery datasource="myDS"
或<cfquery datasource='myDS'
但当解析字符串时,它会变得疯狂<cfquery datasource="#GetSourceName('myDS')#"
很明显,正则表达式的部分(?:'|")是原因。有没有一种方法可以在第一个匹配是单引号时只匹配单引号?在第一个匹配对是双引号时只匹配对双引号?
提前感谢!
编辑:我认为这应该在C#中工作——你只需要做一个反向引用:
datasource's*='s*('|")(.*)(?:'1)
或者
datasource's*='s*('|")(.*)(?:$1)
用对与CCD_ 6的第一匹配的反向引用来匹配CCD_。
当然,您不能忽略具有?:
的第一个捕获组,并且仍然有这项工作。此外,您可能需要设置lazy
标志,以便不与其他"
的匹配
如果可能的话,我建议使用两个不同的正则表达式,或者用不同的方式拆分正则表达式。
对于一个正则表达式,考虑到@Mike发布的问题,("[^"]*")|('[^']*')
然后你可以解析出引号。
另一种可能的方法是使用先行/后看,但这往往会变得混乱,而且没有得到普遍支持。
试着看看这篇文章:
如何将以引号分隔的字符串与正则表达式相匹配?
他们似乎在处理同样的问题。