Предварительная замена на предварительную замену всех
Кто-то был достаточно любезен, чтобы помочь мне с регулярным выражением для очень специфического использования, но моя единственная проблема сейчас заключается в том, что регулярное выражение заменяет только один экземпляр соответствия, а не все совпадения (что и является целью).
Я хотел бы каждый экземпляр <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)));
Теперь это работает, и это замечательно, но это заменяет только один экземпляр.
Вопрос: Должен ли я радикально изменить/изменить свой подход для этого, или это будет небольшая модификация?
Большое вам спасибо.
2 answers
$regex = '~\[(data-user="\d+")\s+(data-userId="\d+")\]\s*(.+?)\s*\[\/\]\s*(.*)~is';
while (preg_match($regex, $string)) {
$string = preg_replace($regex, "<span $1 $2>$3</span>$4", trim(strip_tags($string)));
}
echo $string;
Попробуйте выполнить функцию preg_match_all (http://php.net/preg_match_all ). Я надеюсь, что это так просто.