[英]Regex for matching quotes and single quotes
我正在为ColdFusion代码编写解析器。 我正在使用正则表达式(在c#中)来提取cfquery标记的名称datasource属性。
目前正则表达式是以下<cfquery\\s.*datasource\\s*=\\s*(?:'|")(.*)(?:'|")
它适用于<cfquery datasource="myDS"
或<cfquery datasource='myDS'
但是解析像<cfquery datasource="#GetSourceName('myDS')#"
这样的字符串时会发疯
显然,正则表达式的一部分(?:'|')是原因。当第一个匹配是单引号时,有没有办法只匹配单引号?当第一个匹配是双引号时,只匹配双引号?
提前致谢!
编辑:我认为这应该在C#中工作,你只需要做一个后面的参考:
datasource\s*=\s*('|")(.*)(?:\1)
也许
datasource\s*=\s*('|")(.*)(?:$1)
将datasource="#GetSourceName('myDS')#"
与第一次匹配的后引用匹配为\\1
。
当然,你不能忽略第一个捕获组?:
仍然有这项工作。 此外,您可能希望设置lazy
标志,以便不匹配其他"
s”
如果可能的话,我建议使用两个不同的正则表达式,或者以不同的方式分割正则表达式。
对于单个正则表达式,考虑@Mike发布的问题, ("[^"]*")|('[^']*')
然后你可以解析出引号。
另一种可能的方法是使用先行/后视,但这往往会变得混乱,并且不受普遍支持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.