41

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 ++以下でも)、そのような単純な式が機能することを期待していました.

ここで私が間違っていることはありますか?

4

5 に答える 5

57

これは私のために働く:

findstr /r "^[1-9][0-9]*$ ^-[1-9][0-9]*$ ^0$"

/cこのオプションを使用しない場合、引数はスペースで区切られた検索文字列のリスト<Strings>として扱われます。これにより、スペースは構文の粗い置換のようなものになります。(正規表現にスペースが含まれていない限り、つまり。)|

于 2010-04-11T00:29:41.897 に答える
9

ああ、私はドキュメントをもっとよく読むべきでした。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=
于 2010-04-10T15:13:39.607 に答える
3

または、可能であれば、Windows 用の grep をダウンロードしてください。. 提供するよりも多くの機能findstr

于 2010-04-10T15:19:56.787 に答える