假设我想表示\q(或任何其他特定的"反斜杠转义字符").也就是说,我想匹配\q但不匹配\\q,因为后者是反斜杠转义反斜杠后跟a q.但是\\\q会匹配,因为它是一个反斜杠逃脱的反斜杠,然后反斜杠逃脱q.(嗯,它会匹配到\q最后,而不是\\在开头.)
我知道我需要一个消极的外观,但他们总是把头抬起来,特别是因为反斜杠本身必须在正则表达式中逃脱.
我正在为ColdFusion代码编写解析器.我正在使用正则表达式(在c#中)来提取cfquery标记的名称datasource属性.
目前,正则表达式如下
<cfquery\s.*datasource\s*=\s*(?:'|")(.*)(?:'|")
它适用于像<cfquery datasource="myDS"
或的
字符串
<cfquery datasource='myDS'
但解析字符串时会发疯
<cfquery datasource="#GetSourceName('myDS')#"
显然,正则表达式的一部分(?:'|')是原因.当第一个匹配是单引号时,有没有办法只匹配单引号?当第一个匹配是双引号时,只匹配双引号?
提前致谢!
所以我决定尝试制作一个文本突出显示系统.目前,我只是str_replace用来替换一个单词(例如输入字符串$rstr = str_replace("Console", "<c>Console</c>", $str在哪里$str.
困扰我的是如何替换语音标记(")和引号(')内的内容.例如,如果字符串"控制台"变成了Console.WriteLine("Words");,我怎么会替换"Words"用<sr>"Words"</sr>(<sr>在外部样式表中定义)?
我有我可以使用正则表达式一个,虽然,但1.我不知道该怎么写正则表达式,和2我不知道如何使用正则表达式str_replace.
function hlStr($original)
{
$rstr = explode('"', $original);
return $rstr[0].'<sr>"'.$rstr[1].'"</sr>'.$rstr[2];
}
Run Code Online (Sandbox Code Playgroud)