php
  • string
  • 2017-06-21 7 views -1 likes 
    -1

    複数のhref属性を持つテキスト文字列があります。私はリンクをdifferntに置き換えたい。文字列の複数のURLを異なる値に置き換えます。

    私は元のリンクの配列と置き換えたいURLのリンクの配列を "爆発"させました。しかし、私は問題に直面しています。文字列を新しい値で更新する方法はわかりません。だから、

    、簡単な方法

    $sting1 = 'bla bla bla <a href="some_url">some text</a> bla bla bla <a href="some_url2">some text 2</a> bla bla bla <a href="some_url3">some text 3 3</a>'; 
    

    と文字列

    $sting_new = 'bla bla bla <a href="some_new_url">some text</a> bla bla bla <a href="some_new_url2">some text 2</a> bla bla bla <a href="some_new_url3">some text 3 3</a>'; 
    

    を持っている中で、私は私が「爆発」このHREFのとそれらを置き換えるが、どのように私は$のsting1のテキストを更新することができますすることができます知っていますか?

    +0

    実際の例を提示して、入力と予想される出力を示してください。また、これに関するコードをすでにお持ちの場合は、そのコードも共有してください。 – domsson

    答えて

    1

    2つの方法があります。 1つはstr_replaceを使用しています。これは、置換する部分文字列(または単一の部分文字列)の配列と置換する配列(または単一文字列)を単純に取ります。

    別のアプローチは、それが正規表現

    +1

    配列の 'str_replace'は、OPが毎回異なるURL値を持つように見えるので、OPの質問にうまく答えるようです。 –

    +1

    @JulienLachalあなたはおそらく正しいです!しかし、私は他のオプションが利用可能であることを示すことに害はないように感じる:) – Darvex

    0

    を使用しています以外、私は最善の解決策は、正規表現

    <?php 
    $regex  = '/href="([^"]*)"/si'; 
    $ori_string = 'yourStringWithSomeHrefs'; 
    $replacements = [ 
        'http://foo.bar', 
        'relativeLink', 
        // and so on 
    ]; 
    
    if(preg_match_all($regex, $ori_string, $m, PREG_OFFSET_CAPTURE)) { 
        foreach($m[1] as $key => $value) { 
         $ori_string = substr_replace($ori_string, $replacements[$key], $value[1], str_len($value[0])); 
        } 
    } 
    

    二つのご注意を使用することであると考え、str_replaceに似ている、preg_replaceを使用して、似ています

    1. このコードは
    2. この再テストされていませんgular式は二重引用符hrefにのみ有効です。一重引用符と二重引用符を取得する必要がある場合は、より複雑な正規表現を使用する必要があります。
    関連する問題