匿名質問者

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


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

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/11/29 09:20:04

回答1件)

匿名回答1号 No.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);

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

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

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

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

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

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