我正在尝试使用php preg_replace更改html的所有链接。 所有的uris都有以下形式
http://example.com/page/58977?forum=60534#comment-60534
我想将其更改为:
http://example.com/60534
表示删除“page”之后和“comment-”之前的所有内容,包括这两个字符串。
我尝试了以下操作,但没有返回任何更改:
$result = preg_replace("/^.page.*.comment-.$/", "", $html);
但似乎我的正则表达式语法不正确,因为它返回html不变。 你能帮帮我吗?
答案 0 :(得分:6)
^
是一个仅匹配字符串开头的锚点,$
仅匹配最后一个。为了匹配,你不应该锚定正则表达式:
$result = preg_replace("/page.*?comment-/", "", $html);
请注意,这可能会匹配不是网址的内容。您可能希望更具体地了解要替换的内容,例如,您可能只想替换以http:
或https:
开头并且不包含空格的链接。
答案 1 :(得分:2)
您可能只需要这样:http://php.net/manual/en/function.parse-url.php 此函数解析URL并返回一个关联数组,该数组包含存在的URL的各种组件。
答案 2 :(得分:0)
不使用正则表达式的替代方式。
使用parse_url()
<?php
$url = 'http://example.com/page/58977?forum=60534#comment-60534';
$array = parse_url($url);
parse_str($array['query'], $query);
$http = ($array['scheme']) ? $array['scheme'].'://' : NULL;
echo $http.$array['host'].'/'.$query['forum'];
?>