PHP:使用preg_replace替换两个已知字符串之间的未知字符串

时间:2018-05-19 22:34:30

标签: preg-replace between

我有$ 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不要贪婪 - 否则它将不必要地替换我的字符串的大块。

1 个答案:

答案 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'];