Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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 正则表达式:删除方案,除非它是';s http(s)。(捕获负后向查找模式)_Php_Regex_Capture_Negative Lookbehind - Fatal编程技术网

Php 正则表达式:删除方案,除非它是';s http(s)。(捕获负后向查找模式)

Php 正则表达式:删除方案,除非它是';s http(s)。(捕获负后向查找模式),php,regex,capture,negative-lookbehind,Php,Regex,Capture,Negative Lookbehind,我这里有一个regex黑屏。如何再次捕获消极的后向查找模式 我正在尝试删除uri的方案(包括http/https),除非它是http/https。我已经完成了一半(或者我以为我已经完成了,下面的模式甚至没有编译),但我忘记了如何实际捕获负面模式: preg\u replace(“~^(?快速思考一下: preg_replace ('#^((http[s]{0,1}://)|([a-z]+://))#i', '$2', $uri); preg_replace('#^((?:)。(?为什么要删除它

我这里有一个regex黑屏。如何再次捕获消极的后向查找模式

我正在尝试删除uri的方案(包括http/https),除非它是http/https。我已经完成了一半(或者我以为我已经完成了,下面的模式甚至没有编译),但我忘记了如何实际捕获负面模式:

preg\u replace(“~^(?快速思考一下:

preg_replace ('#^((http[s]{0,1}://)|([a-z]+://))#i', '$2', $uri);

preg_replace('#^((?:)。(?为什么要删除它?这会更改URI的语义。我正在验证url,如果用户没有提供此url,我想在前面添加
http://
。但是,如果用户提供
ftp://
作为方案
http://ftp://somedomain.com
将实际返回具有
Zend\u Uri的有效主机
(我将用来验证的组件),即:
ftp
。希望我在这里说的有意义。:)@fireeyedboy:那你为什么不检查一下它是否包含一个方案呢?@Gumbo:因为如果用户提供了
https
作为一个方案,我不想用
http
替换它。或者我误解了你的意思吗?@fireeyedboy:只有在URI根本没有一个方案。你可以把
[s]{0,1}
写成
s?
。我看了好几遍,才知道为什么这真的有效,但实际上这很聪明。它满足了我的需要。谢谢!@Gumbo:true,我把它改成了:
'preg_replace('.^(https?:/)|([a-z]+:/)#I','1',$url)实际上。@Gumbo我只是觉得这样读起来更容易。同样的,把你的眼睛吸引住的帕伦封起来也是一样的。
(|)
更多。很好!虽然Gumbo说服了我实现目标的另一种方法,但这确实证明了我最初所寻找的。我尝试将
https
以及
preg_replace('#^((?:)合并到一起?
preg_replace('#^((?:.(?<!http))+://)#i', '', $uri);