首页 > 解决方案 > 使用 preg_replace 替换所有匹配项

问题描述

下面的代码完美运行:

$string = '(test1)';
$new = preg_replace('/^\(+.+\)+$/','word',$string);
echo $new;

输出:

word

如果代码是这样的:

$string = '(test1) (test2) (test3)';

如何生成输出: word word word

标签: phpregex

解决方案


为什么我的正则表达式不起作用?

  • ^ and $是锚,这意味着匹配应该从字符串的开头开始并扩展到字符串的结尾

  • .表示匹配除换行符以外的任何内容,+表示一个或多个,默认情况下,正则表达式本质上是贪婪的,因此它会尝试尽可能多地匹配我们想要匹配的位置,( )因此我们需要稍微更改模式

您可以使用

\([^)]+\)

在此处输入图像描述


$string = '(test1) (test2) (test3)';
$new = preg_replace('/\([^)]+\)/','word',$string);
echo $new;

Regex Demo


推荐阅读