いつもお世話になります。
以下のように (??{}) というのを使うと正規表現を再帰することによって入れ子があっても対応するカッコにマッチできることが分かりました。
以下のプログラムでは < から対応する > までを抜いています。
#! 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>>
よろしくお願いします!
No.2
- 回答日時:
一応書いておくと, もとの正規表現が
$re = qr/<
(?:[^<>]|(??{$re}))*
>/x;
と等価なので, 区切りが 2文字以上になったときに (?:[^<>]|(??{$re})) をどうするか, もっというと [^<>] をどう処理するかという問題に落とすことができます. これは「開始の区切りである < もしくは終了の区切りである >」のいずれでもないもの, ということなので, これを 2文字以上のときにどう書くかという問題に帰着されます.
で, 結局これが (?=<|>) を使って表せるぞ, ということで.
ああ, (?:[^<>]|(??{$re})) に合わせるなら (?(?!<|>).|(??{$re})) の方が近いかも.
あと, 開く記号と閉じる記号がちゃんとマッチしない (より正確には「開く方が多い」) 場合にどうなるかは試していないのでわかりません.
ありがとうございます。
昨日は < を『に、>を』に合わせて『から』までで変換するスクリプトを掛けて帰宅したんですが、今朝教えていただいたパターンと同じ結果を返すことが分かりました。
アサーションですね! これは大きく応用できそうです。
どうもありがとうございます。
No.1ベストアンサー
- 回答日時:
$re = qr/<
(?(?=<|>)(??{$re})|.)*
>/x;
でどうだろうか.
うおーーー
#! 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>>△
できますね!!!
ありがとうございます。
明日ゆっくり解析&テストしようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- エアガン・モデルガン MCX-SPEAR LT は、全てsemi-auto仕様だが民間用で民間市場で買えるのか? 1 2022/10/02 14:07
- CAD・DTP Auto CAD LT → Auto CAD 1 2022/04/20 12:29
- 英語 アメリカ文化について質問です。アメリカ人はよく I love you を乱用している気がします。わた 7 2022/12/20 17:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- 英語 What is the ~~~? という疑問文はありますか? 3 2023/08/06 06:16
- 洋画 英語の質問?です。 洋画でi love youといいますよね 主語を「 i 」から「 you 」に変 3 2023/02/19 11:56
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- 英語 love you→LY は、よく略しますが LYTI とは何の略でしょうか??(*・・) lyはlo 1 2022/11/28 18:19
- ロック・パンク・メタル 1991~1998年までB'zの大ファンでした。 そこで私なりのB'zランキング10を発表します。 4 2023/07/10 22:45
- 英語 you think sex without love is not good to?に 【良くないと 2 2022/11/20 01:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
マクロを使ってフォルダー内に...
-
データにカンマが入ったCSVデー...
-
[VBA][Excel]クリップボードか...
-
カンマ区切り
-
CSVの定義
-
データグリッド内の数値をカン...
-
メールのcsv添付ファイルの種類...
-
カンマ区切りの数字をCSVフ...
-
テキストファイルからReadLine...
-
VB2005のTextBoxでカン...
-
C言語 文字列格納
-
VC++のエディトボックスについて
-
メモ帳からエクセルにセル区切...
-
セパレータ文字の意味を教えて...
-
ひとつの命令を複数行に記述
-
テキストファイルのデータ区切...
-
エクセルのセルごとに貼り付け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
マクロを使ってフォルダー内に...
-
カンマ区切りの数字をCSVフ...
-
CSVの定義
-
WORDで改ページすると時々グレ...
-
何故、日本は未だに数字を3桁...
-
データにカンマが入ったCSVデー...
-
3桁ごと?4桁ごと?コンマの...
-
[VBA][Excel]クリップボードか...
-
カンマ区切り
-
VBAでtxtファイルを読み込む際...
-
「カンマ」と「コンマ」は同じ...
-
パス区切りの文字について
-
メモ帳からエクセルにセル区切...
-
EXCELの文字が指数になる
-
C#で、テキストボックスの入力...
-
PHP カンマをエスケープしたい...
-
カンマ区切りでないテキストをc...
おすすめ情報