我在从字符串中删除空的 [url=http://exp.com] [/url] 标记时遇到了一些麻烦。这是我所拥有的,但如果这两个标签之间有什么东西,它也会删除它是不正确的。
$desc = preg_replace("#\[url=.*?\][(\W)]?\[/url\]#i", "", $desc);
我在从字符串中删除空的 [url=http://exp.com] [/url] 标记时遇到了一些麻烦。这是我所拥有的,但如果这两个标签之间有什么东西,它也会删除它是不正确的。
$desc = preg_replace("#\[url=.*?\][(\W)]?\[/url\]#i", "", $desc);
试试这个模式:
$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]