事实证明,它只会进行一次替换,但不会超过两次。
**两个例子:**第一个不起作用:$result_do_not_work第二个工作:$结果_工作
$text_does_not_work = ' *spoiler-name*spoil*/spoiler-name**s-content*(shadow*010*shadow*)*/s-content* *spoiler-name*spoil*/spoiler-name**s-content*(shadow*010*shadow*)*/s-content* *spoiler-name*spoil*/spoiler-name**s-content*(shadow*010*shadow*)*/s-content*
[>google!<](LINK:https://google.com)';
$text_work = ' *spoiler-name*spoil*/spoiler-name**s-content*(shadow*010*shadow*)*/s-content*
[>google!<](LINK:https://google.com)';
$patt = ['~\*spoiler-name\*(.*)\*/spoiler-name\*\*s-content\*\((.*)\)\*/s-content\*~','~\[>(.*)<\]\((.*)\)~'];
$repl=['<details><summary>$1</summary>$2</details>','<a href="$2">$1</a>'];/*<a href="$2">$1</a>*/
$result_work = preg_replace($patt, $repl, $text_work);
$result_does_not_work = preg_replace($patt, $repl, $text_does_not_work);
我尝试了很多方法。例如,这段代码也不起作用:$text='[s]SPOILER[s](content-sp) [s]SPOILER[s](content-sp) [s]SPOILER[s](content-sp)'; $patt = ['/\[s\]([^*]+)\[s\]\(([^*]+)\)/im']; $repl=['<details><summary>$1</summary>$2</details>']; $page = preg_replace($patt, $repl, $text);
结果:剧透[s](内容-sp)[s]剧透[s](内容-sp)[s]剧透内容-sp
1条答案
按热度按时间7fhtutme1#
*
量词是贪婪的,因此.*
将匹配尽可能多的字符,这可能不是这里所需要的。将
(.*)
更改为(.*?)
可能有助于解决您的问题。请参阅PHP Tutorial: Regex Non-greedy (or Lazy)。