6

Request Tracker 4.0 でいくつかの Perl コードを処理していて、チケット リクエスタのメッセージが途切れるエラーが発生しました。私は Perl を初めて使用し、正規表現を使用していくつかの作業を行いましたが、かなり読んだ後でもこれに問題があります。

問題を次のコード行に絞り込みました。

$content =~ s/\n-- \n.*?$//s

私はそれが何をしているのかを完全には理解していません。より良い説明が必要です。

s/ /パターン\n-- \n.*?$に一致し、何も置き換えていないことを理解しています。

私は何を理解して.*?$いません。ここに私の基本的な理解があります:

  • .\n 以外の任意の文字
  • *直前の文字の 0 回以上
  • ?直前の文字の 0 回または 1 回
  • $文字列の終わりです

次に、私が理解していることから、決勝戦s.試合を改行させます

大まかに言うと、「 \n-- \n- このコード行が疑わしい動作を引き起こしている」で始まるテキストを置き換えています。

誰かがこの行が何をしているのか説明できますか? 最初の後のすべてのテキストを削除するだけ \n-- \nですか、それとももっとありますか?

長々とした部分 / 現実の問題 (質問に答えるためにこれを読む必要はありません)

私の正確な問題は、引用されたコンテンツを署名で切り取っていることです。

したがって、顧客からの電子メール A が次のように言う場合:

注文ABCDで何が起こっていますか?
-- 一部の顧客

スタッフの返信には次のように記載されています(顧客の署名の損失に注意してください)

本日発送です

注文ABCDで何が起こっていますか?

お客様が答える

私はそれを手に入れませんでした、それは出荷されませんでした!!!
-- 一部の顧客

本日発送です

注文ABCDで何が起こっていますか?

私たちが返信すると、彼らのメッセージは -- でカットされ、すべてのコンテキストが殺されます。

本日発送 追跡番号12345

私はそれを手に入れませんでした、それは出荷されませんでした!!!

そして、それがどのような順序であるかを説明するなど、より多くの作業につながります。

4

3 に答える 3

1

将来的に正規表現を理解するのに役立つ素晴らしい CPAN モジュールがあります: YAPE::Regex::Explain

ここでオンライン版を見つけることができます: http://rick.measham.id.au/paste/explain.pl

Web サイトで正規表現を実行すると、次の結果が返されます。

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  \n                       '\n' (newline)
--------------------------------------------------------------------------------
  --                       '-- '
--------------------------------------------------------------------------------
  \n                       '\n' (newline)
--------------------------------------------------------------------------------
  .*?                      any character except \n (0 or more times
                           (matching the least amount possible))
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

ドキュメントによると、「Perl バージョン 5.6 以降に追加された正規表現構文、特に 5.10 で追加された構文はサポートされていません」が、実際には、遭遇するほとんどの正規表現を理解するのに役立つように使用できるはずです。

于 2013-08-07T21:25:53.890 に答える