人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

正規表現でネストしている文字を抜き出したい

{{存命人物の出典明記|date=2011-11}}
{{基礎情報 皇族・貴族
| 人名 = 徳仁親王
| お印 = [[アズサ|梓]]{{日本の皇室}}
| 出生日 = {{生年月日と年齢|1960|2|23}}
}}
{{日本の皇室}}

とある文字列から 「基礎情報 皇族・貴族」の中をPHPで抜き出したいのですが ?R
可能でしょうか
↓この様に

| 人名 = 徳仁親王
| お印 = [[アズサ|梓]]{{日本の皇室}}
| 出生日 = {{生年月日と年齢|1960|2|23}}

●質問者: 匿名質問者
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答1号

> ネストしている文字
ネストしている部分は無い感じですが、「{{日本の皇室}}」が複数回出現していることを指しているのでしょうか?

例示されている文字列が正しく、複数の方の情報が無いと仮定します。
一般的に考えられるのは、2種類でしょう。

与えられる文字列は、改行文字は LF のみ、エンコードは UTF-8 であるとします。

その1.正規表現でマッチする部分を取得する

$str = <<<EOL
{{存命人物の出典明記|date=2011-11}}
{{基礎情報 皇族・貴族
| 人名 = 徳仁親王
| お印 = [[アズサ|梓]]{{日本の皇室}}
| 出生日 = {{生年月日と年齢|1960|2|23}}
}}
{{日本の皇室}}
EOL;

preg_match('/{{基礎情報 皇族・貴族\n(.+\n)}}/su', $str, $mch);
var_dump($mch[1]);


その2.文字列の位置を探し部分文字列で取得する

// $str は上記と同じ
$pos1 = strpos($str, '{{基礎情報 皇族・貴族'."\n");
$pos1 += strlen('{{基礎情報 皇族・貴族'."\n");
$pos2 = strpos($str, '}}'."\n".'{{日本の皇室}}', $pos1);
$result = substr($str, $pos1, $pos2 - $pos1);
var_dump($result);

他のエンコードでもキーになる文字列(「基礎情報 皇族・貴族」「日本の皇室」)がご提示のものであれば多分動作するでしょう。
また、ご承知の事とは思いますが、外部からもとになる文字列を取得するのならスクリプトのエンコードと一致していないと(または一致するように変換しないと)望む結果にはなりません

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ