Моя цель состоит в том, чтобы заменить все экземпляры привязанных к конечным + в тегах скобок. Давайте предположим, линию, которая будет заменена выглядит следующим образом:Perl: глобальная подстановка в строке с разделителями тегов
<h> aa- aa- </h> <h> ba- ba- </h>
и должны впоследствии выглядеть
<h> aa+ aa+ </h> <h> ba+ ba+ </h>
Сначала я попробовал это выражение:
s/<h>(.*?)-(.*?)<\/h>/<h>$1+$2<\/h>/g;
, которые дали этот вывод:
<h> aa+ aa- </h> <h> ba+ ba- </h>
g op что приводит к более чем одной подстановке на строку, но только для первого экземпляра для каждой привязки тега (и только если оба круглых скобки содержат знак вопроса).
Чтобы сузить проблему, я попытался добиться замещения без учета тегов. Выражение
s/(.*?)-(.*?)/$1+$2/g;
действительно приводит к желаемому результату
<h> aa+ aa+ </h> <h> ba+ ba+ </h>
Это будет заменить за пределами тега скобки, а также, конечно.
В чем проблема с моим первым выражением и как я могу достичь своей цели полной замены в скобках тегов?
Если есть какие-либо ограничения на набор символов, который доходит до '-' вы можете использовать это. – adamse
Вы должны использовать полноценный синтаксический анализатор, которые не являются регулярными выражениями. – Ether