重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

開発言語:Perl(Win32)
ヴァージョン:5.8.4.810 perl.exeのプロパティー参照

長文の正規表現にパターンマッチを試みているのですが、
本来マッチするはずの文字列に対して、マッチしません。
しかし、正規表現が長文のため、なかなかデバッグが進みません。

どのように、パターンマッチが進んでいるか見ることが出来ればデバック作業が早くなると思うのですが、
私はその方法を知りません。

そこで、質問なのですが、Perlが正規表現をどのように解釈して、パターンマッチを進めているか、確認する方法はないのでしょうか?
できれば、パターンマッチ実行中、解釈している位置と、文字列をレポートとして出力する方法があれば、それを知りたいと思います。

A 回答 (3件)

そういえば、プラグマを使う、という手もありますね。



use re 'debug';

これで、ご希望のレポートは出ると思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Perlの実行状況を確認することに成功しました。
このような、レポートを望んでいました。
今、出力を確認中です。
これで、デバッグが楽になったと判断します。
現在、読んでいますが、なかなか複雑ですね。
ポイントを振って、終了します。

お礼日時:2005/08/16 16:08

> そもそも、マッチが成功しない状況にあります。



とおっしゃる意味は、期待通りのマッチだけでなく、何もマッチしない、という意味ですね?

> その変数は、マッチが成功した際に値がセットするものなので

上記の意味で、これらの変数はマッチが失敗しても、どこかにマッチしさえすれば格納されます。なので、たとえば、必ずマッチするはずの文字列をどこかに埋め込んで(あるいは逆にパターンからマッチして欲しい部分を削除して)おけば、おっしゃるような、

> +や*が何処までマッチしているか

は、少なくとも確認できます。

そうではなく、perlが内部的に解析する過程を知りたい、ということでしたら、すみません、私にはわかりません。

量指定子が意図しない範囲にマッチしてしまう場合は、最短マッチを使ってみると解決することもあります。

この回答への補足

Perlの正規表現の拡張構文や、最短マッチ、最長マッチを使っている正規表現を使用しています。
それゆえに、長く複雑な正規表現になっています。
もっと簡単な正規表現に書き換えることも可能なのですが、パターンマッチに時間が掛かるため、どうしても複雑な正規表現になっています。
現在、短い正規表現でデバッグしているのですが、
やはり、時間が掛かっています。

perlが内部的にどのように解析して、実行しているのか、それが知りたいのです。

補足日時:2005/08/16 15:17
    • good
    • 0

以下の変数をprintさせてみてはどうでしょうか。



$+ → マッチした、カッコで囲んだ部分
$& → 〃、文字列全体
$` → 〃、文字列の前の部分
$' → 〃、文字列の後の部分

この回答への補足

そもそも、マッチが成功しない状況にあります。
その変数は、マッチが成功した際に値がセットするものなので、マッチが成功しない今、使用することは出来ません。
また、+や*が何処までマッチしているかなども知りたいため、結果でなく過程の状況の値がほしいのです。

補足日時:2005/08/16 14:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!