0

我正在尝试使用 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 不变。你能帮我解决这个问题吗?

4

3 回答 3

6

The^是一个仅匹配字符串开头的锚点,并且$仅匹配结尾。为了匹配,您不应锚定正则表达式:

$result = preg_replace("/page.*?comment-/", "", $html);   

请注意,这可能会匹配不是 URL 的内容。您可能希望更具体地说明将被替换的内容,例如,您可能只想替换以http:or开头https:且不包含空格的链接。

于 2012-11-15T10:47:37.163 回答
2

你可能只需要这个:http://php.net/manual/en/function.parse-url.php 这个函数解析一个 URL 并返回一个关联数组,其中包含 URL 中存在的各种组件。

于 2012-11-15T10:48:32.140 回答
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'];
?>

演示:http ://codepad.org/xB3kO588

于 2012-11-15T10:55:42.323 回答