关于c#:Regex用于匹配报价和单引号

Regex for matching quotes and single quotes

我目前正在为ColdFusion代码编写解析器。我正在使用regex(在c)提取cfquery标记的name datasource属性。

目前,正则表达式如下

它适用于像

但是当分析字符串时,它会变得疯狂

显然是正则表达式的一部分(?原因是'')。当第一个匹配是单引号时,是否有方法只匹配单引号?只有在第一场比赛是双引号的时候才匹配双引号?

事先谢谢!


编辑:我认为这应该适用于C你只需要做一个反向引用:

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

或者也许

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

匹配datasource="#GetSourceName('myDS')#"\1的第一个匹配的后引用。

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


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

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

另一种可能的方法是使用lookahead/lookbehind,但这往往会变得混乱,而且不受普遍支持。


试试看这篇文章:

How can I match a quote-delimited string with a regex?

他们似乎在处理同一个问题。