作为解析脚本的一部分,我试图将字符串转换是这样的:正则表达式替换左括号
<a href="http://www.web.com/%20Special%20event%202013%20%282%29.pdf">
到
<a href="http://www.web.com/%20Special%20event%202013%20(2).pdf">
正则表达式的右括号正常工作
perl -i -pe "s~(href\=\/?[\"\']\.\.\/$i\-(?:(?!%29).)*)%29([^\"\']*[\"\'])~\1)\2~g" "$pageName".html
给我
<a href="http://www.web.com/%20Special%20event%202013%20%282).pdf">
问题棱与左括号相当于正则表达式:
perl -i -pe "s~(href\=\/?[\"\']\.\.\/$i\-(?:(?!%28).)*)%28([^\"\']*[\"\'])~\1(\2~g" "$pageName".html
仅返回两组没什么之间:
<a href="http://www.web.com/%20Special%20event%202013%202%29.pdf">
逃离(与替代反斜杠(或两个)不起作用。如果我用一些其他字符(例如〜\ 1#(#\ 2〜g))包装它,括号仍然消失(给我%20 ## 2%29)。
如果在绝望情况下, 7个parenthesises进入替代,它的工作原理。
perl -i -pe "s~(href\=\/?[\"\']\.\.\/$i\-(?:(?!%28).)*)%28([^\"\']*[\"\'])~\1(((((((\L\2~g" "$pageName".html
输出
<a href="http://www.web.com/%20Special%20event%202013%20(2%29.pdf">
可有人请理解这一点。
谢谢。这是一般的好建议。我试图在发布之前简化问题,但显然很大程度上错过了该标记。我回去清理了一些东西,并加入了更多调试,最终将问题追溯到我的脚本中的另一个流氓替换 – monototo 2013-05-09 02:41:59
澄清了几点:$ i是一个变量,因为它位于shell脚本中。其次,我知道可选的斜杠不是有效的HTML,我只是试图容纳WYSISYG编辑器所做的任何事情。归根结底,尽管你给了它的批判性评估使我有了正确的思维方式,可以多次重新评估这种情况,直到我明白为止。谢谢! – monototo 2013-05-09 02:47:22
我收集到'$ i'是一个shell变量,但是我无法将你的正则表达式与你声称匹配的字符串进行协调。我尝试过的匹配第一个模式的任何字符串也会匹配第二个模式,所以我无法复制您的问题。这里有一个很好的例子,把整个东西写成一个Perl脚本,而不是一个不确定的shell和Perl的混合体,在那里没有人确定应该有多少反斜杠。 Perl比任何shell都要多得多,你应该专注于彻底的学习。 – Borodin 2013-05-09 02:59:23