2014-12-27 37 views
1

我有以下数据。从PHP中的字符串中删除任何类型的URL?

例1

From : http://de.example.ch/biz/barbar-vintage-z%C3%BCrich 

I want: /biz/barbar-vintage-z%C3%BCrich 

并且如果有

http://www.example.ch/biz/barbar-vintage-z%C3%BCrich 

然后 我也想

/biz/barbar-vintage-z%C3%BCrich 
+0

看一看使用['pathinfo'(HTTP:// php.net/manual/en/function.parse-url.php)来做到这一点。 – slugonamission 2014-12-27 17:19:31

+1

只需运行['parse_url()'](https://php.net/manual/en/function.parse-url.php),我认为它是你想要的'path'元素。你不需要一个正则表达式。 – halfer 2014-12-27 17:20:25

+0

不,但我试用了正则表达式 – 2014-12-27 17:20:40

回答

3

如果你想通过正则表达式来做到这一点,那么你可以使用:

$s = 'http://de.example.ch/biz/barbar-vintage-z%C3%BCrich'; 
echo preg_replace('~^https?://[^/]+~', '', $s); 
//=> /biz/barbar-vintage-z%C3%BCrich 

否则如评论说的parse_url函数也让你有这个值。

+1

我可能会为该正则表达式添加一个开始锚点。 – halfer 2014-12-27 17:23:57

+0

好点@halfer:谢谢我编辑。 – anubhava 2014-12-27 17:24:43

1
function getRelativePath($url) 
{ 
    $matches = array(); 
    if (preg_match('#^(http://|https://)([^./]+\.)+[a-z]{2,3}(/.*)$#', $url, $matches) { 
     return $matches[3]; 
    } else { 
     return false; 
    } 
} 
1

你可以使用preg_matchpreg_match_all

preg_match('~^https?://[^/]+\K.+~', $data, $matches); 

DEMO

0

就试试这个:

<?php 
$url = 'http://de.example.ch/biz/barbar-vintage-z%C3%BCrich'; 
echo preg_replace('~^https?://[^/]+~', '', $url); 
?>