0

findstr正規表現を使用して、Subversion にフック スクリプトを実装しようとしています。これは、問題追跡ツール (Atlassian JIRA) で使用される形式と一致するエントリをログ メッセージに含めることを強制することを目的としています。私たちの問題はそれぞれ、ハイフンで区切られた 4 ~ 6 個の大文字と 2 ~ 4 個の数字で構成されています (例: "TEST-554" または CMMGT-392")。Subversion のドキュメントの指示に従って、バッチ ファイルを作成して、正規表現を使用して、正しい形式のエントリのログ メッセージを確認します。

findstr ([A-Z]{3,6}\-[0-9]{2,4}) > nul

多くのテスト ツールで正規表現をテストしましたが、動作しているように見えますが、フック スクリプトの一部として実行すると、一致が返されません。一種の「コントロール」として、正規表現を使ってみました

findstr ...... > nul

一致するものを見つけることができました。私がどこで間違っているのか誰にもわかりますか?

4

1 に答える 1

2

findstr正規表現を使用するオプションが必要ですが、/R拡張正規表現をサポートしていないため、counts ( {3,6}) などは機能しません。また、ゼロまたは 1 つの一致 ( ?) は機能しないため、必要なことを行うとかなり冗長になります。また、英語の Windows 照合は、[A-Z]'A'、'b'、'B'、'z'、および 'Z' には一致しますが、'a' には一致しないことを意味します。うまくいくかもしれないものは次のとおりです。

findstr /R "[ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]-[0-9][0-9][0-9][0-9]"

この信じられないほど冗長なコマンドは、シェルの最大コマンド長を超える可能性があります (チェックしていません) が、基本的には、文字と数字のカウントの順列ごとに個別の一致を含めることで、必要なことを実行します。これは、もう 1 つの奇妙な点です。このオプションfindstrを使用しないと/C、一致文字列内のスペースを使用して、個々の一致式に区切られます。

findstrPowerShell、Python、さらには VBScript などのオプションがある場合は、それを使用することをお勧めします。幸運を!

編集: 上記のコマンドを生成するために使用した Perl ワンライナーは次のとおりです。

perl -le 'BEGIN{$\=" "}for $x (3..6){for $y (2..4){print join("","[",A..Z,"]") x $x, "-", "[0-9]" x $y}}'
于 2012-02-29T22:41:24.843 に答える