PHP正则表达式删除[]标记之间的标记

时间:2013-04-18 18:35:47

标签: php regex

说我有

$content = "some text [again < dummy1>< /dummy1> some te < dummy2>< /dummy2>< /dummy3>xt] keep theses < needkeeped>xxx< needkeeped>"

我想删除所有代码< dummyx>,但我想仅针对[]字符之间的代码

预期结果将是

$content = "some text [again some text] keep theses `< needkeeped>xxx< needkeeped>"`

我试过

preg_replace('/<[^>]*>/', '', $content)

但它删除了所有标签

2 个答案:

答案 0 :(得分:4)

您可以使用

'/<[^>]*>(?=[^[\]]*\])/'

它远非万无一失,但可能还不错。

只有在字符串前面]之前有[时才会替换代码。

当然,它要求字符串中的<>[]使用不同。

答案 1 :(得分:3)

preg_replace_callback('/\[[^\]]+\]/', function($matches){
    return preg_replace('/<[^>]*>/', '', $matches[0]);
}, $content);

首先,找到所有方括号区域,然后替换其中的标签。

http://ideone.com/wmyfXS