регулярное выражение: найти и заменить каждое совпадение
-
10-07-2019 - |
Вопрос
Мне нужно изменить элементы, которые окружают некоторое содержимое в строке, оставляя содержимое как есть. Я делаю это с помощью регулярного выражения, но когда я заменяю с помощью позиционного параметра ($ 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?
Решение
Может быть проще заменить <
и >
независимо друг от друга. Таким образом, он становится простым поиском-заменой, которому не нужно использовать обратные ссылки.
Другие советы
Вы сможете выполнить одну операцию, если установите флажок g
, как на этом скриншоте ...:
(источник: aleax.it )