Php Preg_replace到Preg_replace All

Php Preg_replace到Preg_replace All,php,regex,preg-replace,markdown,Php,Regex,Preg Replace,Markdown,有人很好心地帮我解决了一个正则表达式的特殊用途,但我现在唯一的问题是,正则表达式只替换一个匹配实例,而不是所有匹配(这是目标) 我希望在这里找到的每一个实例以及“时尚蓝色按钮”类: <span class="stylish-blue-button"> <span style="display:none;">[data-user="12345" data-userId="678910"]</span> John Smith <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...
为此,我获得了以下preg_替换:

preg_replace('~\[(data-user="\d+")\h+(data-userId="\d+")\]\s*(.+?)\s*\[/\]\s*(.*)~s', '<span $1 $2>$3</span>$4', trim(strip_tags($string)));
preg\u replace('~\[(data user=“\d+”)\h+(data userId=“\d+”)\]\s*(.+?)\s*\[/\]\s*(*)、'$3$4',修剪(带标签($string));
现在,它可以工作了,非常棒,但它只替换了一个实例

问题:我是否必须彻底改变/改变我的方法才能做到这一点,还是只是一个小小的修改


非常感谢。

尝试函数preg\u match\u all()。我希望它就这么简单。

Regex不是解析HTML/XML的正确工具,请改用它DOMDocument@Uchiha虽然我完全同意,但由于我想做的第一件事是在用户生成的字符串上执行strip_tags(),这难道不符合解析HTML的目的吗?另外,我想,由于我的定制降价将是非常一致的,这不会是最糟糕的事情。你还认为我应该进一步推动DOM文档吗?
preg\u match\u all('~\[(data user=“\d+”)\h+(data userId=“\d+”)\]\s*(.+?)\s*\[/\]\s*(.*)~s',strip\u标记($string),$tags)似乎根本没有给我想要的东西。还是谢谢你。嘿,非常感谢你的建议,但不幸的是,这似乎不起作用。就像我文章中的正则表达式一样,这只替换了第一个实例,而不是全部。你可以在在线工具中尝试。
$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;
$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;