使用错误@preg_replace。我的代码有什么问题?

时间:2017-11-03 08:15:09

标签: php regex preg-replace

我编写此代码以将$ 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);

任何人都请帮助我

2 个答案:

答案 0 :(得分:1)

在你的正则表达式中,你需要用引号括起来的URL,但在测试输入中,URL=之后的URL不加引号。因此找不到匹配,也没有替换。

答案 1 :(得分:0)

我发现了两个问题。

$ string。='|';这增加了额外的'|'首先。 并且'\“未标记为可选。

变化

$string .= '|';

if( $string ) {
   $string .= '|';
}

和模式

$pattern = '#\[url=[\'\"]?('.$string.')[\'\"]?\].*\[\/url\]#imsU'