Php 如何使用正向前瞻替换字符串中除一个http://之外的所有http://呢?

Php 如何使用正向前瞻替换字符串中除一个http://之外的所有http://呢?,php,regex,Php,Regex,如何使用正向前瞻替换字符串中除一个http://之外的所有http://呢 我的用户输入有时在字符串中包含多个http://或https://例如http://http://wwww.site.com/我需要删除所有实例,但只删除一个。我读过关于在正则表达式模式中使用正向前瞻的内容,但似乎无法使其工作 我尝试了以下方法: preg_replace( 'https?://(?=.*https?://)', '', $url ); 这可能会起作用: <?php $text = 'http:

如何使用正向前瞻替换字符串中除一个http://之外的所有http://呢

我的用户输入有时在字符串中包含多个http://或https://例如
http://http://wwww.site.com/
我需要删除所有实例,但只删除一个。我读过关于在正则表达式模式中使用正向前瞻的内容,但似乎无法使其工作

我尝试了以下方法:

preg_replace( 'https?://(?=.*https?://)', '', $url );
这可能会起作用:

<?php

$text = 'http://https://http://http://https://abc.com';
$text = preg_replace('#(https?://)+https?://#iU', '', $text);
echo $text;
这可能会起作用:

<?php

$text = 'http://https://http://http://https://abc.com';
$text = preg_replace('#(https?://)+https?://#iU', '', $text);
echo $text;

丢失
s
可以通过使用像
(s?
这样的组,然后在替换文本中使用
\1
来修复。我想我犯了一个小错误:如果最后一个是http(不带s),它将删除所有http://发生。。。有人知道吗?第二个错误,没必要逃避刀砍!ring0使它更干净。丢失
s
可以通过使用类似
(s?
)的组来修复,然后在替换文本中使用
\1
。我想我犯了一个小错误:如果最后一个是http(不带s),它会删除所有http://事件。。。有人知道吗?第二个错误,没必要逃避刀砍!ring0使它更干净。您的替换模式缺少添加的
preg\u
代码所需的正则表达式分隔符(正则表达式前后的任何非字母数字字符),感谢Jan指出您的替换模式缺少
preg\u
所需的正则表达式分隔符(正则表达式前后的任何非字母数字字符)添加了代码,感谢Jan指出这一个更好;)我认为保留最后一次出现可能更有用。。。在我看来,当人们键入http://并粘贴chrome的URL时,就会自动添加http://前缀。好的是最后一个。顺便说一句,这是最后一个。这一个更好;)我认为保留最后一个事件可能更有用。。。在我看来,当人们键入http://并粘贴chrome的URL时,就会自动添加http://前缀。好的是最后一个。顺便说一句,这是最后一个。