В рамках сценария синтаксического анализа я пытаюсь преобразовать такие строки:
<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">
Может кто-нибудь, пожалуйста, понять это.