phpで、wikiの記法で書かれたテキストで[[~]]で括られたリンク内容を抽出するプログラムを書きたいのですが、下記のようなリンクが入れ子になったものでも抽出するように動作させるにはどうすれはよろしいでしょうか?


例:
今日も[[お日柄も[[良く]]いい[[天気]]]]ですね。

取得したい内容:
お日柄も[[良く]]いい[[天気]]


できればソース付きで回答して頂けると大変助かります。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/02 08:41:27
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント100pt

一例です。

<?php
$a = '今日も[[お日柄も[[良く]]いい[[天気]]]]ですね。';
$b = preg_match_all('/(?:\[\[)(.+)(?:\]\])/', $a, $matches, PREG_SET_ORDER);
print_r($matches);

余談
最も内側のリンク(良くと天気)だけを取り出す例

<?php
$a = '今日も[[お[日柄]も[[良く]]いい[[天気]]]]ですね。';
$b = preg_match_all('/(?:\[\[)((?:(?!(?:\[\[)).)+?)(?:\]\])/', $a, $matches, PREG_SET_ORDER);
print_r($matches);
id:windofjuly

勘違いしてたようです。
ほんとに求めているのは下記ですよね?

<?php
$a = '今日は[[お日柄も[[良く]]いい[[天気]]]]ですね。昨日は[[台風で[天気]]は[[悪かった]]]]ですね。';
$b = preg_match_all('/\[(((?>[^][]+)|(?R))*)\]/x', $a, $matches);
print_r($matches[0]);
2012/10/01 14:38:06
id:wankodon

最後のでバッチリです。まさか一行で済むとは思いませんでした。素晴らしい!
早速使わせて頂きます。有り難うございます。

2012/10/02 08:40:57

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません