Preg_replace to Preg_replace All

Кто-то был достаточно любезен, чтобы помочь мне с регулярным выражением для очень специфического использования, но моя единственная проблема сейчас заключается в том, что регулярное выражение заменяет только один экземпляр матча и не все Матчи (что является целью).

мне бы хотелось каждый экземпляр <SPAN> с классом «стильная синяя кнопка», найденным здесь:

<span class="stylish-blue-button">
<span style="display:none;">[data-user="12345" data-userId="678910"]</span>
John Smith
<span style="display:none;">[/]</span>
</span>
...Blablabla some other text...

Чтобы стать этим:

[data-user="12345" data-userId="678910"]John Smith[/] ...Blablabla some other text...

Для этого мне был предоставлен этот preg_replace:

preg_replace('~\[(data-user="\d+")\h+(data-userId="\d+")\]\s*(.+?)\s*\[/\]\s*(.*)~s', '<span $1 $2>$3</span>$4', trim(strip_tags($string)));

Теперь это работает и это замечательно, но заменяет только один экземпляр.

Вопрос: Должен ли я радикально изменить / изменить свой подход, чтобы сделать это, или это будет небольшая модификация?

Большое спасибо.

3

Решение

$regex = '~\[(data-user="\d+")\s+(data-userId="\d+")\]\s*(.+?)\s*\[\/\]\s*(.*)~is';

while (preg_match($regex, $string)) {
$string = preg_replace($regex, "&lt;span $1 $2&gt;$3&lt;/span&gt;$4", trim(strip_tags($string)));
}

echo $string;
2

Другие решения

Попробуй функцию preg_match_all (http://php.net/preg_match_all). Я надеюсь, что это так просто.

0

По вопросам рекламы [email protected]