- ベストアンサー
Perl正規表現の実行レポートを作成する方法とは?
- Perlの正規表現の長文パターンマッチでデバッグが進まない場合、パターンマッチの進行状況と文字列をレポートとして出力する方法を知りたい
- Perl正規表現の解釈とパターンマッチの進行状況を確認する方法が知りたい
- Perlの正規表現において、長文のパターンマッチをデバッグするために、パターンマッチの進行状況と文字列をレポートとして出力する方法を教えてほしい
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
そういえば、プラグマを使う、という手もありますね。 use re 'debug'; これで、ご希望のレポートは出ると思いますよ。
その他の回答 (2)
- taseki
- ベストアンサー率66% (155/233)
> そもそも、マッチが成功しない状況にあります。 とおっしゃる意味は、期待通りのマッチだけでなく、何もマッチしない、という意味ですね? > その変数は、マッチが成功した際に値がセットするものなので 上記の意味で、これらの変数はマッチが失敗しても、どこかにマッチしさえすれば格納されます。なので、たとえば、必ずマッチするはずの文字列をどこかに埋め込んで(あるいは逆にパターンからマッチして欲しい部分を削除して)おけば、おっしゃるような、 > +や*が何処までマッチしているか は、少なくとも確認できます。 そうではなく、perlが内部的に解析する過程を知りたい、ということでしたら、すみません、私にはわかりません。 量指定子が意図しない範囲にマッチしてしまう場合は、最短マッチを使ってみると解決することもあります。
補足
Perlの正規表現の拡張構文や、最短マッチ、最長マッチを使っている正規表現を使用しています。 それゆえに、長く複雑な正規表現になっています。 もっと簡単な正規表現に書き換えることも可能なのですが、パターンマッチに時間が掛かるため、どうしても複雑な正規表現になっています。 現在、短い正規表現でデバッグしているのですが、 やはり、時間が掛かっています。 perlが内部的にどのように解析して、実行しているのか、それが知りたいのです。
- taseki
- ベストアンサー率66% (155/233)
以下の変数をprintさせてみてはどうでしょうか。 $+ → マッチした、カッコで囲んだ部分 $& → 〃、文字列全体 $` → 〃、文字列の前の部分 $' → 〃、文字列の後の部分
補足
そもそも、マッチが成功しない状況にあります。 その変数は、マッチが成功した際に値がセットするものなので、マッチが成功しない今、使用することは出来ません。 また、+や*が何処までマッチしているかなども知りたいため、結果でなく過程の状況の値がほしいのです。
お礼
ありがとうございます。 Perlの実行状況を確認することに成功しました。 このような、レポートを望んでいました。 今、出力を確認中です。 これで、デバッグが楽になったと判断します。 現在、読んでいますが、なかなか複雑ですね。 ポイントを振って、終了します。