PHP preg_replace 个包含括号的值

PHP preg_replace values that contain parentheses

在我的 PHP 脚本中,我想使用 preg_replace 替换值,跳过 HTML 标签 <a> 和 [=13= 中的任何值].这些值包含在数组中,因此以下是循环中 运行 的当前代码片段:

$Used[$i] = preg_replace("~<a[^>]*>.*?</a\s*>(*SKIP)(*FAIL)|{$MatchFinal[$i]}~","{$MatchLinkFinal[$i]}", $value);

代码有效,但包含括号 () 的值除外。

例如,如果 $MatchFinal[$i] 包含值 Fatigue,则它会将其替换为包含 link 的值 $MatchLinkFinal[$i]<a>。 ..Fatigue...<a>。但是,如果 $MatchFinal[$i] 包含值 Hair (Dry),则它不会替换它。

为什么不替换包含括号的值?

注意:包含空格 and/or 个撇号的值将被替换。

我尝试转义括号...

$MatchFinal[$i] = str_replace("(", "\(", $MatchFinal[$i]);

$MatchFinal[$i] = str_replace(")", "\)", $MatchFinal[$i]);

...但我收到一条错误消息:

Warning: preg_replace(): Compilation failed: missing ) at offset 51

你想要preg_quote()

$MatchFinal[$i] = preg_quote($MatchFinal[$i]);