有一个这种网址
https://example.com.ua/part1/part2/part3/product-123.html
如何使用正则表达式获取product-123.html
?
我试过了:
echo
preg_replace('#/([a-zA-Z0-9_-]+\.html)$#','$1','https://example.com.ua/part1/part2/part3/product-123.html');
答案 0 :(得分:5)
您不需要正则表达式
这样做的方法不止一种。
查看parse_url()
。
parse_url():此函数解析URL并返回一个关联数组,该数组包含存在的URL的各种组件。
这将为您提供大部分路径,并将为您分离主机。然后你只需使用explode()和end()来爆炸到最后一部分。
$url = parse_url('http://example.com/project/controller/action/param1/param2');
$url['last'] = end(explode('/', $url[path]));
Array
(
[scheme] => http
[host] => example.com
[path] => /project/controller/action/param1/param2
[last] => param2
)
或者你可以直截了当地说:
$last = ltrim(strrchr(parse_url($url, PHP_URL_PATH), '/'), '/');
你也可以直接在URL上直接使用explode()结合end()。 (如果你不需要parse_url的额外信息,它也会短得多)
$last = end(explode('/', $url));
你也可以像这样使用basename()
$url = "http://example.com/project/controller/action/param1/param2";
$last = basename($url);
// Output: param2
答案 1 :(得分:1)
为何选择正则表达式?
$str ="https://example.com.ua/part1/part2/part3/product-123.html";
Echo Substr($str, strrpos($str, "/")+1);
Strrpos找到最后一个/
并返回位置。
<小时/> 如果必须使用正则表达式,这是一个preg_replace https://regex101.com/r/6zJwBo/1
$re = '/.*\//';
$str = 'https://example.com.ua/part1/part2/part3/product-123.html';
$subst = '';
$result = preg_replace($re, $subst, $str);
答案 2 :(得分:1)
preg_replace
仅替换您找到的内容。在这种情况下product-123.html
。因此,您要/product-123.html
替换product-123.html
,而https://example.com.ua/part1/part2/part3
保持不变。
要替换所有内容,只保留您要执行的匹配
echo
preg_replace('#.*/([a-zA-Z0-9_-]+\.html)$#','$1','https://example.com.ua/part1/part2/part3/product-123.html');
你不需要正则表达式就可以完成这项任务,如果你这样做了,使用preg_match
可能更干净。
这是preg_match
方法:
preg_match('#[a-zA-Z0-9_-]+\.html$#', 'https://example.com.ua/part1/part2/part3/product-123.html', $match);
echo $match[0];
正则表达式演示:https://regex101.com/r/6dytu0/2/