※ ChatGPTを利用し、要約された質問です(原文:正規表現:対応する文字列A~文字列Bの検索(入れ子あり))
正規表現で文字列A~文字列Bの検索(入れ子あり)
このQ&Aのポイント
正規表現を使用して、文字列A~文字列Bの間にあるテキストを検索する方法について教えてください。
正規表現を再帰的に使用して、入れ子構造を持つカッコにマッチする方法を教えてください。
文字列Aから文字列Bまでのテキストを抜き出すための正規表現のプログラム例を教えてください。
正規表現:対応する文字列A~文字列Bの検索(入れ子あり)
いつもお世話になります。
以下のように (??{}) というのを使うと正規表現を再帰することによって入れ子があっても対応するカッコにマッチできることが分かりました。
以下のプログラムでは < から対応する > までを抜いています。
#! perl
# betweenBracket -- < から対応 > までを抜く
# 全角ブランクで字下げを表現しています。
$re = qr/
<
[^<>]*
(?:
(??{$re})
[^<>]*
)*
>
/x;
while(<DATA>) {
chomp;
for (/$re/g) {
print "$_ ";
}
print "\n";
}
__DATA__
I <love> you
I <love> <you>
<I <love> <you>>
実行結果:
<love>
<love> <you>
<I <love> <you>>
これですが、<、>のような1文字のカッコではなくて文字列による開始~終了でもできるでしょうか。
具体的に言うと < から > までと言う風にしたいです。
#! perl
# betweenEntity -- < から対応 > までを抜く
・・・???・・・・
__DATA__
I <love> you
I <love> <you>
<I <love> <you>>
実行結果:
<love>
<love> <you>
<I <love> <you>>
よろしくお願いします!
お礼
うおーーー #! perl # betweenEntities -- < から対応 > までを抜く # 全角ブランクで字下げを表現しています。 $re = qr/< (?(?=<|>)(??{$re})|.)* >/x; while(<DATA>) { chomp; for (/$re/g) { print "△$_△"; } print "\n"; } __DATA__ I <love> you I <love> <you> <I <love> <you>> => >betweenEntities.pl △<love>△ △<love>△△<you>△ △<I <love> <you>>△ できますね!!! ありがとうございます。 明日ゆっくり解析&テストしようと思います。