0

我在从字符串中删除空的 [url=http://exp.com] [/url] 标记时遇到了一些麻烦。这是我所拥有的,但如果这两个标签之间有什么东西,它也会删除它是不正确的。

$desc = preg_replace("#\[url=.*?\][(\W)]?\[/url\]#i", "", $desc);
4

1 回答 1

1

试试这个模式:

$desc = preg_replace('~\[url=[^]]*]\s*+\[/url]~i', '', $desc);

这个想法是避免使用不包含右方括号(即:)的字符类的惰性量词[^]]

只允许在开始标签和结束标签之间使用\s*+白色字符,但如果不需要,可以将其删除。

请注意,右方括号不需要在字符类之外转义,并且必须在字符类内转义,除非它是第一个字符。你可以写[^]a]or [^a\]]or ,[^\]a]但不是[^a]]被解释为所有字符,但a后面跟着]

我对你试图做的事情感到惊讶,因为[url=www.example.com][/url]代表[url=www.example.com]www.example.com[/url]

于 2013-06-19T03:23:25.910 回答