我有以下主题:
$subject = '[ta #12286152] c-d0-231-34 drop [#3414a43]';
我希望匹配所有给出id的内容。我的代码是这样的,但是当放置时,12286152
它被替换好了,但是当放3414a43
时,所有主题都被删除了?
echo preg_replace('/(\[)(.*?)3414a43(.*?)(\])/', '', $subject);
我想替换拥有MY ID的[]
中的所有内容。
答案 0 :(得分:2)
整个主题已被删除,因为匹配的第一个[
是[
旁边的ta
,而.*?
匹配到第一个3414a43
。请参阅your regex demo。
您需要使用否定字符类[^][]
或[^]]
:
/\[[^][]*3414a43[^][]*]/
请参阅regex demo
模式详情:
\[
- 文字[
[^][]*
- 除[
和]
以外的零个或多个字符([^]]*
将匹配0 +非]
s)3414a43
- 您的身份证件[^][]*
- 同上。]
- 一个文字结束]
符号(不需要在字符类之外转义)由于您没有使用捕获,我建议删除所有捕获组括号。
$id = "3414a43";
$str = "[ta #12286152] c-d0-231-34 drop [#3414a43]";
$result = preg_replace('~\[[^][]*' . $id . '[^][]*]~', '', $str);
echo $result;