регулярное выражение: найти и заменить каждое совпадение

StackOverflow https://stackoverflow.com/questions/1220635

  •  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?

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top