2016-04-13 13 views
1

を交換プリプレグは、私は文字列を置換しようとしていウィキタグ

rock, blues, soul, pop, Have a Little Faith 

適切な正規表現は何ですか?

私はこのパターン/\[[[\w\s]+\W(.*)\]],/をテストしましたが、動作しませんでした。

+1

あなたが代替として何を使用しましたか? – Barmar

+0

@Barmar $ 1でも結果は使用できませんでした。 –

+0

貪欲でない '。*?'を使う必要があります。 '。*'は貪欲であるため、最後の ']]'にすべて一致します。 – Barmar

答えて

1

あなたは

'~\[\[(?:[^][|]+\|)?([^][|]+)]]~' 

を使用し、$1で置き換えることができます。 - [[

  • (?:[^][|]+\|)?リテラル - オプション(1又は0)リテラル|
  • まで1+ [以外の文字、 ]、そして |

    • \[\[regex demo

      説明を見ます

    • [^][|]+ - グループ1:[]以外の1文字以上、および|
    • ]] - リテラル]]

    PHP demo:

    $str = "[[Rock music|rock]], [[blues]], [[soul music|soul]], [[pop music|pop]], [[Have a Little Faith (Joe Cocker album)|Have a Little Faith]] "; 
    $result = preg_replace('~\[\[(?:[^][|]+\|)?([^][|]+)]]~', "$1", $str); 
    echo $result; 
    
    +0

    ありがとうと、文字列contains()のような場合:[[小さな信仰(ジョーコッカーのアルバム)|ちょっとした信仰を持って]] –

    +0

    私が指摘したように、 '\ [\ [(?:[^] [|] + \ |)?([^] [|] +)]] '。更新された回答を参照してください。 –

    +0

    なぜ '/'の代わりに '〜'区切り文字を使いましたか? – Shafizadeh

    関連する問題