Possible Duplicate:
Regular Expression to escape double quotes inside single quotes
我需要一个正则表达式(没有其他语言!!,最好是 perl 语法 REGEX 或 PCRE 语法 REGEX)用 \"
替换所有双引号 "
在单引号字符串内。这是一个示例字符串(文件的一部分):
var baseUrl = $("#baseurl").html();
var head = '<div id="finishingDiv" style="background-image:url({baseUrl}css/userAd/images/out_main.jpg); background-repeat: repeat-y; ">'+
'<div id="buttonbar" style="width:810px; text-align:right">';
(请注意:它们不必成对出现“someValueBetween”,因此在一个单引号字符串中可能存在不均匀数量的双引号。)
这应该是上面最后一行的最终结果:
'<div id=\"buttonbar\" style=\"width:810px; text-align:right\">';
提前致谢
***更新:
为了清楚起见,我只想要一个正则表达式,而不是一个 perl 程序。正则表达式可以是 perl regex 语法或 PHP PCRE 语法(据我所知,这是与 perl regex 语法非常接近的语法)。目标是您可以在搜索中运行 IDES 中的正则表达式并替换支持正则表达式的菜单(如 Eclipse 和 PhpEd f.e)!!
换句话说,我想要一个正则表达式,我将把它放在搜索 IDE 字段中,结果在单引号字符串中给出所有未转义的 "
。在 eclipse 的替换字段中我然后可以只用 \$1
来转义它们。
它们应该在 Regexbuddy 或 regex coach 中工作,以便我可以测试它们。
至少这是计划:)
您只要求 Perl(或 PCRE)。
好的。
如果您只想转义未转义的双引号,无论您在哪里找到它们,请执行以下操作:
s{
(?<! (?<! \\ ) \\{1} )
(?<! (?<! \\ ) \\{3} )
(?<! (?<! \\ ) \\{5} )
(?<! (?<! \\ ) \\{7} )
(?= " )
}{\\}xg;
如果您想在未转义的单引号之间转义未转义的双引号,而您只有一对这样的单引号,请执行以下操作:
1 while s{
(?(DEFINE)
(?<unescaped>
(?<! (?<! \\ ) \\{1} )
(?<! (?<! \\ ) \\{3} )
(?<! (?<! \\ ) \\{5} )
(?<! (?<! \\ ) \\{7} )
)
(?<single_quote> (?&unescaped) ' )
(?<double_quote> (?&unescaped) " )
(?<unquoted> [^'] *? )
)
(?<HEAD>
(?&single_quote)
(?&unquoted)
)
(?<TAIL>
(?&double_quote)
(?&unquoted)
(?&single_quote)
)
}<$+{HEAD}\\$+{TAIL}>xg;
但是,如果您每行可能有多组成对的未转义单引号,并且您只想转义位于这些未转义单引号之间的未转义双引号,那么请执行以下操作:
sub escape_quote {
my $_ = shift;
s{
(?<! (?<! \\ ) \\{1} )
(?<! (?<! \\ ) \\{3} )
(?<! (?<! \\ ) \\{5} )
(?<! (?<! \\ ) \\{7} )
(?= " )
}{\\}xg;
return $_;
}
s{
(?(DEFINE)
(?<unescaped>
(?<! (?<! \\ ) \\{1} )
(?<! (?<! \\ ) \\{3} )
(?<! (?<! \\ ) \\{5} )
(?<! (?<! \\ ) \\{7} )
)
(?<single_quote> (?&unescaped) ' )
(?<unquoted> [^'] *? )
)
(?<HEAD> (?&single_quote) )
(?<TARGET> (?&unquoted) )
(?<TAIL> (?&single_quote) )
}{
$+{HEAD} .
escape_quote($+{TARGET}) .
$+{TAIL}
}xeg;
请注意,这一切都假定您没有包含未转义单引号的合法配对未转义双引号。即使是这样的事情也会让你失望:
my $cute = q(') . "stuff" . q(');
不过,您可能想要使用适当的解析模块。
请不要注意所有花哨和欺骗性的错误 SO 着色。由于某种原因,它似乎无法像 perl 那样解析 Perl。无法想象为什么。 ☺