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')#"

很明显,正则表达式的部分(?:'|")是原因。有没有一种方法可以在第一个匹配是单引号时只匹配单引号?在第一个匹配对是双引号时只匹配对双引号?

提前感谢!

Regex用于匹配引号和单引号

编辑:我认为这应该在C#中工作——你只需要做一个反向引用:

datasource's*='s*('|")(.*)(?:'1)

或者

datasource's*='s*('|")(.*)(?:$1)

用对与CCD_ 6的第一匹配的反向引用来匹配CCD_。

当然,您不能忽略具有?:的第一个捕获组,并且仍然有这项工作。此外,您可能需要设置lazy标志,以便不与其他"的匹配

如果可能的话,我建议使用两个不同的正则表达式,或者用不同的方式拆分正则表达式。

对于一个正则表达式,考虑到@Mike发布的问题,("[^"]*")|('[^']*')然后你可以解析出引号。

另一种可能的方法是使用先行/后看,但这往往会变得混乱,而且没有得到普遍支持。

试着看看这篇文章:

如何将以引号分隔的字符串与正则表达式相匹配?

他们似乎在处理同样的问题。