首页 > 解决方案 > PHP:使用 preg_replace 替换两个已知字符串之间的未知字符串

问题描述

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

标签: preg-replacebetween

解决方案


PHP 有这方面的工具,不需要使用正则表达式。parse_url获取 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'];

推荐阅读