繁体   English   中英

用于匹配报价和单引号的正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM