如何获得URL的一部分?

Sky*_*Rar 0 php regex preg-replace regex-group regex-greedy

如何从网址中删除除基本网址和第一部分以外的所有部分。零件数量不确定。基本网址是可变的。我尝试了一些正则表达式,但没有成功。

$url =  http://www.example.com/part1/part2/part3/part4;
base_url = parse_url($url, PHP_URL_HOST); // Outputs www.example.com

$desired_output = http://www.example.com/part1;
Run Code Online (Sandbox Code Playgroud)

Emm*_*mma 5

在这里,我们可以使用preg_replace带有简单表达式的,可能类似于:

(.+\.com\/.+?\/).+
Run Code Online (Sandbox Code Playgroud)

我们使用以下捕获组来捕获所需的输出:

(.+\.com\/.+?\/)
Run Code Online (Sandbox Code Playgroud)

然后滑动到字符串的末尾并替换为$1

测试

$re = '/(.+\.com\/.+?\/).+/m';
$str = 'http://www.example.com/part1/part2/part3/part4';
$subst = '$1';

$result = preg_replace($re, $subst, $str);

echo $result;
Run Code Online (Sandbox Code Playgroud)

演示

RegEx电路

jex.im可视化正则表达式:

在此处输入图片说明


对于所有域,.com无论是否存在,我们都可以使用以下表达式来解决:

(.+\..+?\/.+?\/).+
Run Code Online (Sandbox Code Playgroud)

测试

$re = '/(.+\..+?\/.+?\/).+/m';
$str = 'http://www.example.com/part1/part2/part3/part4';
$subst = '$1';

$result = preg_replace($re, $subst, $str);

echo $result;
Run Code Online (Sandbox Code Playgroud)

演示版