私はfindstr
とその/r
フラグは、正規表現を許可します。特に、整数を検証したいと思います。
正規表現
^[0-9][0-9]*$
負でない数値でもうまく機能しましたが、負の数値もサポートするようになりましたので、
^([1-9][0-9]*|0|-[1-9][0-9]*)$
正または負の整数またはゼロのいずれか。
正規表現は正常に動作します理論的に。 PowerShellでテストし、私が望むものと一致します。ただし、
findstr /r /c:"^([1-9][0-9]*|0|-[1-9][0-9]*)$"
そうではありません。
findstr
が最も高度な正規表現をサポートしていないことは知っていますが(おそらくNotepad ++の下でもかなりの成果です)、このような単純な式が機能することを期待していました。
ここで私が間違っていることはありますか?
これは私のために働く:
findstr /r "^[1-9][0-9]*$ ^-[1-9][0-9]*$ ^0$"
/c
オプションを使用しない場合、<Strings>
引数は、スペースで区切られた検索文字列のlistとして扱われ、スペースが|
コンストラクト。 (正規表現にスペースが含まれていない限り、つまり。)
ああ、私は ドキュメント を読んでおくべきだった。 findstr
は明らかに交互をサポートしていません(|
)。
したがって、おそらく複数の呼び出しに戻るか、最終的にすべてをカスタムパーサーに置き換えます。
これは今のところ私がやっていることです:
set ERROR=1
rem Test for zero
echo %1|findstr /r /c:"^0$">nul 2>&1
if not errorlevel 1 set ERROR=
rem Test for positive numbers
echo %1|findstr /r /c:"^[1-9][0-9]*$">nul 2>&1
if not errorlevel 1 set ERROR=
rem Test for negative numbers
echo %1|findstr /r /c:"^-[1-9][0-9]*$">nul 2>&1
if not errorlevel 1 set ERROR=
または、可能であれば、 Windows用grep をダウンロードします。 findstr
が提供するよりも多くの機能。
同じことを実現するより単純なregex
が可能です。元の式の先頭にオプションのマイナスを追加するだけです:
^-?[0-9][0-9]*$
findstrの正規表現 のサポートはかなり制限されています。 Notepad ++を使用することをお勧めします。 find in filesオプションはPerl互換の正規表現をサポートしています。ファイル名、行番号、一致するテキストを示す結果は、テキストファイルに簡単にコピーできます。