Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php I';我试图使用preg#u replace来检测和更改URL,但它';由于语法错误,它无法工作,什么';发生什么事了?_Php_Regex - Fatal编程技术网

Php I';我试图使用preg#u replace来检测和更改URL,但它';由于语法错误,它无法工作,什么';发生什么事了?

Php I';我试图使用preg#u replace来检测和更改URL,但它';由于语法错误,它无法工作,什么';发生什么事了?,php,regex,Php,Regex,可能重复: 我检测URL的模式是:\b[(http://https://)]*[www]*[\.]*(\S+\.[a-z]{2,})/*,而我的替换模式是\1\2。但是,当我遇到以下错误时,它似乎不起作用: 警告:preg_replace():第1行[…][…]中的未知修饰符“/” 我做错了什么 另外,如果有人提到如何检测URL中可能有多个句点用于子域(如name.subdomain.canada.gov)的事实,我将如何无限地检测到这一点?我知道我可以有\S*.*,但这不是像“可能有另一

可能重复:

我检测URL的模式是:
\b[(http://https://)]*[www]*[\.]*(\S+\.[a-z]{2,})/*
,而我的替换模式是
\1\2
。但是,当我遇到以下错误时,它似乎不起作用:



警告:preg_replace():第1行[…][…]中的未知修饰符“/”


我做错了什么

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


我的实际用法是:
preg\u replace(“\b[(http://https://)]*[www]*[\.]*(\S+\.[a-z]{2,})/*,“\1\2”,$text)

PHP需要一个周围的字符来分隔正则表达式修饰符和正则表达式 i、 e.
preg\u replace(“~yourregex~”,…)

但是在你的表达式中有更多的错误,这些错误也应该被修复。您错误地使用了[]和()。 对于简单的ulr匹配器,更好的表达方式可能是-对于您的特殊场景,这必须根据您的需要进行更改:

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

分隔符错误,或没有分隔符。您必须自己解决这个问题,因为您没有显示实际的代码/用法。更具体地说:如果我使用了周围的字符,然后将其更改为
\b([http://https://])*[www]*[\.]*(\S+\.[a-z]{2,})/*
,它会工作吗?我的印象是,您使用[]来指定几乎一组特定的匹配项,因为没有更好的术语,例如[a | b]和()用于反向引用。[]是字符类的语法,它只匹配一个可能的字符-您需要的是(?:http://| https://)。括号开头的?:告诉正则表达式匹配器将其作为子模式进行威胁。请查看