- ベストアンサー
正規表現を用いた特定の位置までの抜き出し方法
なんか考えると正規表現じゃムリじゃないと思えてきてならないのですが、 Wikipediaのデータのある部分の抜き出し方法です。 [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]] これを、これとして抜き出したいです。 「[[画像:」、「]]」で括られています。それで括られた内部に「[[」、「]]」が 存在する場合もあります。 [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]][[画像:abcd.jpg|thumb|かきくけこ([[かきく]][[けこさ]])]] このパターンなら2つを抜き出したいです。 [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]][[かきくけこ|さしすせそ]] このパターンなら1つを抜き出したいです。 こんな事、可能でしょうか?
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
$bad_subject = "[[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]]bb[[aaa]]"; $bad_subject .= "[[画像:abcd.jpg|thumb|かきくけこ([[かきく]][[けこさ]])]]"; preg_match_all( "/ \[ ( ( (?>[^][]+) | (?R) )* ) \] /x", $bad_subject, $matches); print_r($matches); Array ( [0] => Array ( [0] => [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]] [1] => [[aaa]] [2] => [[画像:abcd.jpg|thumb|かきくけこ([[かきく]][[けこさ]])]] ) [1] => Array ( [0] => [画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])] [1] => [aaa] [2] => [画像:abcd.jpg|thumb|かきくけこ([[かきく]][[けこさ]])] ) [2] => Array ( [0] => [画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])] [1] => [aaa] [2] => [画像:abcd.jpg|thumb|かきくけこ([[かきく]][[けこさ]])] ) ) ゴミ取りは自分でやって。ということで。
その他の回答 (12)
- hrm_mmm
- ベストアンサー率63% (292/459)
>括られた内部に「[[」、「]]」 みたところこの [[文字]]は間に他の文字を挟まず連続しているとしてよいのですよね? 以下で、どうですかね?ご呈示の文字列ではうまくいったと思うのだけど。 それから、ソースの文字コードはeucで実験しました。 $data = '[[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]][[画像:abcd.jpg|thumb|かきくけこ([[かきく]][[けこさ]])]]'; $pattern = '/\[\[画像[^\[\]]*(\[\[[^\[\]]*\]\])*[^\[\]]*\]\]/'; $pnum = preg_match_all($pattern, $da, $matches, PREG_OFFSET_CAPTURE ); print_r($matches); // $matches[0]の配列内にpattern全体にマッチした文字列群、$pnumにその個数が得られる // $matches[0][0][0] に求める一個目、$matches[0][1][0]に2個目、 // 配列3次元目の$matches[0][0][1]は文字列内のマッチ部分の開始位置オフセット(byte位置みたい?)
- RAPTsong
- ベストアンサー率42% (74/175)
何が言いたいのか、サッパリわかりません。 1つ、2つ、というのは、何が基準になっているのでしょうか。 正規表現の書き方(表現)を質問したいのですか? それとも、PHP での(ソースコードレベルでの)正規表現の使い方を聞きたいのですか?
- 1
- 2
補足
開始が[[画像:、終了が]] 基準はこれです。 但し、質問にあるとおり、 [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]]が 取り出される事になり、 その内部にある「[[」、「]]」って止まったり、そこだけ抜き出されたり、 [[画像:abcd.jpg|thumb|あいうえお([[あかさ]][[たなは]])]][[画像:abcd.jpg|thumb|かきくけこ([[かきく]][[けこさ]])]] これを1つとして抜き出してはダメです。 すみません、正規表現の書き方をご教示下さい。