регулярное выражение: найти и заменить каждое совпадение - PullRequest
1 голос
/ 03 августа 2009

Мне нужно изменить элементы, которые окружают некоторое содержимое в строке, оставляя содержимое как есть. Я делаю это с помощью регулярного выражения, но когда я заменяю использование позиционного параметра ($ 1), он использует только первое совпадение.

Например, если у меня есть эта строка:

<strong>I want</strong> to change <i>this</i> text, 
but <u>I can't</u>. <div class="question">Why?</div>.

Я хочу изменить его на:

<strong>I want</strong> to change <i>this</i> text, 
but <u>I can't</u>. <div class="question">Why?</div>.

Но я могу получить только это:

<strong>I want<strong> to change <strong>this<strong> text, 
but <strong>I can't<strong>. <strong>Why?<strong>.

Я использую следующее регулярное выражение:

\x26lt;(.*?)\x26gt;

(глобально, и заменить его на "<$1>")

Полагаю, проблема в том, что я не могу сказать, сколько совпадений будет найдено и как обращаться к каждому из них. Возможно, в Perl я мог бы использовать $ +, но это не работает. Я делаю это с помощью модуля регулярных выражений Yahoo Pipes. Это должно быть очень похоже на реализацию PHP, afaik.

Как я могу использовать каждый матч отдельно в Yahoo Pipes?

Ответы [ 2 ]

3 голосов
/ 03 августа 2009

Может быть проще заменить &lt; и &gt; независимо. Таким образом, он становится просто находкой-заменой, которой не нужно использовать обратные ссылки.

0 голосов
/ 03 августа 2009

Вы сможете выполнить одну операцию, если установите флажок g, как на этом скриншоте ...: screenshot
(источник: aleax.it )

...