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

E. *_*aep 9 c# regex coldfusion

我正在为ColdFusion代码编写解析器.我正在使用正则表达式(在c#中)来提取cfquery标记的名称datasource属性.

目前,正则表达式如下 <cfquery\s.*datasource\s*=\s*(?:'|")(.*)(?:'|")

它适用于像<cfquery datasource="myDS" 或的 字符串 <cfquery datasource='myDS'

但解析字符串时会发疯 <cfquery datasource="#GetSourceName('myDS')#"

显然,正则表达式的一部分(?:'|')是原因.当第一个匹配是单引号时,有没有办法只匹配单引号?当第一个匹配是双引号时,只匹配双引号?

提前致谢!

Nul*_*Ref 6

编辑:我认为这应该在C#中工作,你只需要做一个后面的参考:

datasource\s*=\s*('|")(.*)(?:\1)
Run Code Online (Sandbox Code Playgroud)

也许

datasource\s*=\s*('|")(.*)(?:$1)
Run Code Online (Sandbox Code Playgroud)

匹配datasource="#GetSourceName('myDS')#"与第一场比赛的后面引用\1.

当然,你不能忽略第一个捕获组,?:并且仍然有这项工作.此外,您可能要设置的lazy标志,以免匹配额外"