首页 > 解决方案 > 正则表达式从 url 中选择路径以在 preg_replace() 中使用它

问题描述

  1. 如何在 php 中使用正则表达式选择http(s)://domain.tdl/pathurl中的所有内容,http(s)://domain.tdl然后将/pathpreg_replace()用作搜索模式。

  2. 另一个问题:如何preg_replace()在一个字符串中使用正则表达式填充参数,以便仅从原始完整 urlhttp(s)://domain.tdl/path获取http(s)://domain.tdl

我无法更改 php 脚本的代码,并且我preg_replace()从 Web 表单发送参数。我只能在那个 web 表单中传递preg_replace()@pattern@replacement参数。

PS Urls 和域总是不同的。

谢谢!

标签: phpregexpath

解决方案


在我看来,您只想获得带有协议的域,以及最后的路径。如果是这样,试试这个:

$url    = 'https://domain.tdl/path';
$urlArr = parse_url($url);
var_dump("$urlArr[scheme]://$urlArr[host]"); // Returns http://domain.tdl
var_dump($urlArr['path']); // Returns /path

eval.in 演示

parse_url有趣的是,这使用 PHP 的函数来解析 url。


或者,如果你真的需要使用正则表达式,试试这个:

$url = 'https://domain.tdl/path';
preg_match('/(https?:\/\/(?:www\.)?[a-z]+\.[a-z]+)(\/.*)/i', $url, $matches);
var_dump($matches[1]); // Returns http://domain.tdl
var_dump($matches[2]); // Returns /path

regex101 链接eval.in 演示


推荐阅读