我有$ stringF。 $ stringF中包含的内容如下(字符串是一行,而不是如下所示的自动换行):
http://news.google.com/news/url?sa=t&fd=R&ct2=us&usg=
AFQjCNHWQk0M4bZi9xYO4OY4ZiDqYVt2SA&clid=
c3a7d30bb8a4878e06b80cf16b898331&cid=52779892300270&ei=
H4IAW6CbK5WGhQH7s5SQAg&url=https://abcnews.
go.com/Lifestyle/wireStory/latest-royal-wedding-thousands-streets-windsor-55280649
我想找到那个字符串并使它看起来像这样:
https://abcnews.go.com/Lifestyle/wireStory/latest-royal-
wedding-thousands-streets-windsor-55280649
基本上我需要使用preg_replace来查找以下字符串:
http://news.google.com/news/url?sa= ***SOME UNKNOWN CONTENT*** &url=http
并将其替换为以下字符串:
http
我的php有点生疏,甚至比正规表达更生气,所以我很难想出这个。我的代码如下所示:
$stringG = preg_replace('http://news.google.com/news/url?sa=*&url=http','http',$stringH);
除了我知道我不能使用通配符,我知道我需要专门处理特殊字符(冒号,正斜杠,问号和符号等)。希望有人可以帮助我。
另外值得注意的是,我的$ stringF包含了这些字符串的多个实例,所以我需要preg_replace不要贪婪 - 否则它将不必要地替换我的字符串的大块。
答案 0 :(得分:0)
PHP有工具,不需要使用正则表达式。 parse_url
获取网址的组件(方案,主机,路径,锚点,查询,...)和parse_str
以获取查询部分的键/值。
$url = 'http://news.google.com/news/url?sa=t&fd=R&ct2=us&usg=AFQjCNHWQk0M4bZi9xYO4OY4ZiDqYVt2SA&clid=c3a7d30bb8a4878e06b80cf16b898331&ci=52779892300270&ei=H4IAW6CbK5WGhQH7s5SQAg&url=https://abcnews.go.com/Lifestyle/wireStory/latest-royal-wedding-thousands-streets-windsor-55280649';
parse_str(parse_url($url, PHP_URL_QUERY), $arr);
echo $arr['url'];