Мне нужно заменить все экземпляры совпадения, но только в определенных тегах.
Например, рассмотрим страницу HTML, содержащую <body>...</body>
в этих тегах, которые нужно заменитьвсе вхождения говорят:
{embed=xxx}
до
<a href="xxx">xxx</a>
Я могу сделать это для всей страницы, используя что-то вроде (попытка # 1):
match={embed=(.*?)}
replace=<a href="$1">$1</a>
но это заменяет все части страницы, даже те разделы, где я не хочу, чтобы она была заменена, в частности, заголовок.
Когда я пытаюсь добавить условия вокруг соответствия, определенного выше, как это (попытка № 2):
match=(<body.*?)(?:({embed=(.*?)})+)(.*?)(</body)
replace=$1<a href="$3">$3</a>$4$5
, если заменяет только первый элемент.
Поэтому, если бы я использовал этот пример текстовых данных для поиска:
<head>
{embed=zzz}
</head>
<body>
{embed=aaa}<br />
{embed=bbb}<br />
{embed=ccc}<br />
</body>
, я получаю:
<head>
{embed=zzz}
</head>
<body>
<a href="aaa">aaa</a>aaa<br />
{embed=bbb}<br />
{embed=ccc}<br />
</body>
В идеале я хочу получить вывод:
<head>
{embed=zzz}
</head>
<body>
<a href="aaa">aaa</a><br />
<a href="bbb">bbb</a><br />
<a href="ccc">ccc</a><br />
</body>
Я знаю, что, вероятно, слишком усложняю вещи, но регулярные выражения подобны маслу для воды моего мозга - они просто не смешиваются.