regex 减价.替换两个匹配preg_replace

3ks5zfa0  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(151)

事实证明,它只会进行一次替换,但不会超过两次。

**两个例子:**第一个不起作用:$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

7fhtutme

7fhtutme1#

*量词是贪婪的,因此.*将匹配尽可能多的字符,这可能不是这里所需要的。
(.*)更改为(.*?)可能有助于解决您的问题。
请参阅PHP Tutorial: Regex Non-greedy (or Lazy)

相关问题