を交換プリプレグは、私は文字列を置換しようとしていウィキタグ
rock, blues, soul, pop, Have a Little Faith
適切な正規表現は何ですか?
私はこのパターン/\[[[\w\s]+\W(.*)\]],/
をテストしましたが、動作しませんでした。
を交換プリプレグは、私は文字列を置換しようとしていウィキタグ
rock, blues, soul, pop, Have a Little Faith
適切な正規表現は何ですか?
私はこのパターン/\[[[\w\s]+\W(.*)\]],/
をテストしましたが、動作しませんでした。
あなたは
'~\[\[(?:[^][|]+\|)?([^][|]+)]]~'
を使用し、$1
で置き換えることができます。 - [[
(?:[^][|]+\|)?
リテラル - オプション(1又は0)リテラル|
[
以外の文字、
]
、そして
|
\[\[
:regex demo 説明を見ます
[^][|]+
- グループ1:[
、]
以外の1文字以上、および|
]]
- リテラル]]
$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;
ありがとうと、文字列contains()のような場合:[[小さな信仰(ジョーコッカーのアルバム)|ちょっとした信仰を持って]] –
私が指摘したように、 '\ [\ [(?:[^] [|] + \ |)?([^] [|] +)]] '。更新された回答を参照してください。 –
なぜ '/'の代わりに '〜'区切り文字を使いましたか? – Shafizadeh
あなたが代替として何を使用しましたか? – Barmar
@Barmar $ 1でも結果は使用できませんでした。 –
貪欲でない '。*?'を使う必要があります。 '。*'は貪欲であるため、最後の ']]'にすべて一致します。 – Barmar