I';m试图使用preg_replace来检测和更改URL,但它';It’由于语法错误而无法工作,what’


I'm trying to use preg_replace to detect and change URLs, but it's not working due to an error in syntax, what's going on?

可能重复:
故障排除"preg_replace():未知修饰符"

我检测URL的模式是:'b[(http://|https://)]*[www]*['.]*('S+'.[a-z]{2,})/*,而我的替换模式是'1'2。然而,它似乎不起作用,因为我得到了这个错误:



警告:preg_replace():[…][…]1
行上的未知修饰符"/"


我做错了什么?

此外,如果有人能提到如何检测一个URL中子域(如name.subdomain.canada.gov)可能有多个句点的事实,我该如何无限检测?我知道我可以有'S*'.*,但这不是像"可能有另一组子域和另一个句点,但不一定",如果还有另外五个子域的序列呢?

我的实际用法是:preg_replace("'b[(http://|https://)]*[www]*['.]*('S+'.[a-z]{2,})/*", "'1'2", $text);

PHP需要一个环绕的字符来分隔正则表达式修饰符和正则表达式即preg_replace("~yourregex~",...)

但是表达式中还有更多错误,也应该进行修复。你用错了[]和()。对于一个简单的ulr匹配器来说,一个更好的表达式可能是-对于您的特殊场景,必须根据您的需求进行更改:

"~(?:http://|https://)(?:[a-z0-9_-]+'.)+(?:[a-z0-9_-]+)~"