preg-replace - 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 不要贪婪 - 否则它将不必要地替换我的大量字符串。
解决方案
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'];
推荐阅读
- python - Flask 尝试运行 python 脚本的内部服务器错误
- mysql - Drupal 8 数据库安装未连接到 docker mysql 容器
- odoo - odoo - 如何在视图中显示上下文?
- php - wordpress - 媒体库类别 URL 结构
- android - 具有来自 firebase 的数据的多个布局 recyclerView
- reactjs - 带 React 的 Stripe Connect
- javascript - 文件切换js在角度6中不起作用
- autoconf - autoconf:如何完全禁用语言检查(没有可用的 c 编译器)
- javascript - 无法解析 express.Multer req.file 中的 multipart/form-data 以 udefined 的形式出现
- javascript - 进入-更新-退出模式后节点的 x 和 y 属性丢失