作为解析脚本的一部分,我正在尝试像这样转换字符串:
<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)。
但是,如果我绝望地在替换中添加了七个括号,它就可以了。
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">
有人可以理解这一点。