我编写此代码以将$ TheWhiteList替换为消息中的null字符串并将其显示到屏幕。 但它不起作用。你能告诉我哪里错了吗?
$TheWhiteList = Array
('http://facebook.com',
'google.com',
'facebook.com',
'stackoverflow.com',
);
$message ='test test tes tes [URL=http://facebook.com]http://facebook.com[/URL]
[URL=http://facebook.com]http://facebook.com[/URL]
[URL]http://stackoverflow.com[/URL]
[URL]http://facebook.com[/URL]
[URL]http://google.com[/URL]';
$string = '';
if(!empty($TheWhiteList))
{
foreach ($TheWhiteList as $value)
{
$string .= '|';
$string .=preg_quote($value);
}
$pattern = '#\[url=[\'\"]('.$string.')[\'\"]\].*\[\/url\]#imsU';
$replace = null;
$message = @preg_replace($pattern, $replace, $message);
}
print_r($message);
任何人都请帮助我
答案 0 :(得分:1)
在你的正则表达式中,你需要用引号括起来的URL,但在测试输入中,URL=
之后的URL不加引号。因此找不到匹配,也没有替换。
答案 1 :(得分:0)
我发现了两个问题。
$ string。='|';这增加了额外的'|'首先。 并且'\“未标记为可选。
变化
$string .= '|';
到
if( $string ) {
$string .= '|';
}
和模式
$pattern = '#\[url=[\'\"]?('.$string.')[\'\"]?\].*\[\/url\]#imsU'