Preg_replace to Preg_replace All

时间:2015-10-27 06:30:05

标签: php regex preg-replace markdown

有人非常友好地帮助我使用正则表达式进行非常具体的使用,但我现在唯一的问题是,正则表达式只替换了匹配的一个实例,而不是所有匹配(这是目标)。

我希望 <SPAN>的每个实例都带有“Stylish-blue-button”类:

<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 个答案:

答案 0 :(得分:2)

$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;

答案 1 :(得分:0)

尝试功能preg_match_all(http://php.net/preg_match_all)。我希望它那么简单。