0

phppreg_replaceを使用してhtmlのすべてのリンクを変更しようとしています。すべてのURIの形式は次のとおりです

http://example.com/page/58977?forum=60534#comment-60534

次のように変更します:

http://example.com/60534

これは、これら2つの文字列を含め、「ページ」の後と「コメント-」の前のすべてを削除することを意味します。

次のことを試しましたが、変更が返されません。

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

しかし、htmlが変更されずに返されるため、私の正規表現構文は正しくないようです。これを手伝ってくれませんか。

4

3 に答える 3

6

は、文字列の先頭のみに一致し、末尾のみ^に一致するアンカーです。$一致させるには、正規表現を固定しないでください。

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

これは、URL ではないものと一致する可能性があることに注意してください。置き換えられるものをより具体的にしたい場合があります。たとえば、空白を含まないhttp:or and で始まるリンクのみを置き換えたい場合があります。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 に答える