警告:preg_replace()[function.preg replace]:未知修饰符


Warning: preg_replace() [function.preg-replace]: Unknown modifier

我可以;我不知道我的线路出了什么问题:

$ret = preg_replace( "(http://|https://|http://www.|https://www.)([[:alnum:]#?~/&=._-]+)", "<a href='"''1''2'" target='"_blank'">''1''2</a>", $ret);

我试着在第一个arg的第一个pos中插入一个/,但没有成功。

我被难住了。谢谢你的帮助。

只需在正则表达式中添加分隔符,选择表达式中不存在的分隔符以避免转义,这里我建议!:

$ret = preg_replace( "!(http://|https://|http://www.|https://www.)([[:alnum:]#?~/&=._-]+)!", "<a href='"$1$2'" target='"_blank'">$1$2</a>", $ret);

你也可以简化一点:

$ret = preg_replace( "!(https?://(?:www'.)?['w#?~/&=.-]+)!", "<a href='"$1'" target='"_blank'">$1</a>", $ret);
$ret = preg_replace(
                '/((?:http:'/'/|https:'/'/)(?:www'.)?)([[:alnum:]#?~'/&=._-]+)/', 
                '<a href="$1$2" target="_blank">$1$2</a>', 
                $ret
);

它应该这样工作。基本上,您需要转义正则表达式中的正向斜杠。