具有id的Preg_replace内容

时间:2016-08-26 07:52:27

标签: php regex

我有以下主题:

$subject = '[ta #12286152] c-d0-231-34 drop [#3414a43]';

我希望匹配所有给出id的内容。我的代码是这样的,但是当放置时,12286152它被替换好了,但是当放3414a43时,所有主题都被删除了?

echo preg_replace('/(\[)(.*?)3414a43(.*?)(\])/', '', $subject);

我想替换拥有MY ID的[]中的所有内容。

1 个答案:

答案 0 :(得分:2)

整个主题已被删除,因为匹配的第一个[[旁边的ta,而.*?匹配到第一个3414a43。请参阅your regex demo

您需要使用否定字符类[^][][^]]

/\[[^][]*3414a43[^][]*]/

请参阅regex demo

模式详情

  • \[ - 文字[
  • [^][]* - 除[]以外的零个或多个字符([^]]*将匹配0 +非] s)
  • 3414a43 - 您的身份证件
  • [^][]* - 同上。
  • ] - 一个文字结束]符号(不需要在字符类之外转义)

由于您没有使用捕获,我建议删除所有捕获组括号。

PHP demo

$id = "3414a43";
$str = "[ta #12286152] c-d0-231-34 drop [#3414a43]"; 
$result = preg_replace('~\[[^][]*' . $id . '[^][]*]~', '', $str);
echo $result;