$textから [[ ]] に囲まれた単語だけを抽出する正規表現は
preg_match_all('/\[\[(.*?)\]\]/',$text, $matches)
と書けました。
それでは
$text = [[自転車|バイク]]に乗った[[男]]がいる
から [[ ]] に囲まれていて、なおかつ | が入っている単語を抽出するのはどうすればいいでしょうか
上記の例なら、 自転車|バイク と抽出したいのです。
preg_match_all('/\[\[(.*?\|.*?)\]\]/',$text, $matches)
と書いてみましたが、条件によっては変な抽出の仕方をしてしまいます。
よろしくお願いいたします。
うまくいかないケースというのは、[[××]] が [[×××|×××]]の前にあるケースでしょうか。
であれば、
preg_match_all('/\[\[([^\[]*?\|.*?)\]\]/',$text, $matches);
といった感じで回避できるかと思います。
コメント(2件)
具体的には、どんな事になってしまうのでしょうか?
質問文の例ではうまくいきますよね?
例えばこちらの文章だと抽出がうまくいきません。
Internet Protocolとは[[インターネット]]において情報の伝達を行う[[通信プロトコル|プロトコル]]であり、インターネットの基礎部分となる重要な役割を持つ。
この場合だと以下が抽出されます。
インターネット]]において情報の伝達を行う[[通信プロトコル|プロトコル
[[インターネット]]の部分に正規表現が反応してしまっているようです。