В рамках синтаксического анализа сценария Я пытаюсь преобразовать строки, как это:Regex подставляя открывающую скобку
<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">
Проблема arrises с эквивалентным регулярным выражением для открытия круглых скобках:
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">
Может кто-нибудь, пожалуйста, разобраться в этом.
Спасибо. Это хороший совет. Я попытался упростить проблему, прежде чем публиковать ее здесь, но явно пропустил отметку довольно значительно. Я вернулся и очистил все дальше, добавив больше отладки и, в конечном счете, проследил проблему до другой подстановки замены в моем сценарии – monototo
Чтобы прояснить пару пунктов: $ i - переменная, потому что это сидит внутри скрипта оболочки. Во-вторых, я знаю, что необязательная косая черта недействительна HTML, я просто пытаюсь разместить все, что вызвал редактор WYSISYG. В конечном счете, хотя критическая оценка, которую вы дали, поставила меня в правильное настроение, чтобы вернуться назад и переоценить ситуацию еще несколько раз, пока я ее не понял. Благодаря! – monototo
Я понял, что '$ i' является переменной оболочки, но я не мог согласовать ваше регулярное выражение со строкой, которую, по вашему утверждению, совпал. Любая строка, которую я попробовал, которая соответствовала первому шаблону, также соответствовала бы второму, поэтому я не смог бы реплицировать вашу проблему. Здесь есть сильный аргумент в том, чтобы написать все это как скрипт Perl, а не зловещую смесь оболочки и Perl, где никто не уверен, сколько обратных косых черт должно быть где угодно. Perl гораздо более универсален, чем любая оболочка, и вы должны сосредоточить свои усилия на тщательном изучении. – Borodin