-2

-1 または任意の正の整数 (ただし 0 ではない) のいずれかの整数と一致する必要があります。これは正規表現を使用して可能になるはずですが、私はいつも把握するのが難しいと感じていました.

誰かがそれを一致させる方法を教えてくれ、同時に適切な説明を提供してくれると非常にありがたいので、私は何かを学びます.

ありがとう。

4

3 に答える 3

3

この正規表現を試してください OR:

/^-1|[1-9]\d*$/

ライブデモで動作するこの正規表現をご覧ください


上記の正規表現では、先頭にゼロがある正の数は許可されていません。それを許可したい場合は、これを試してください。これは、負の先読みを使用してすべてのゼロを除外します。

/^-1|(?!0+$)\d+$/

ライブデモで動作するこの正規表現をご覧ください

于 2013-08-23T16:49:06.167 に答える
2

あまりにも包丁になろうとしないでください。私は単にこれを行います:

if (( $value == int( $value ) and $value > 0 ) or $value == -1 ) {
  ....
}

また、エラーが発生しやすい正規表現は避けてください。特に複雑すぎる場合はそうです。

これにより、あなたが何を望んでいるかが完全に明確になります。0 より大きい、または-1 の整数が必要です。さらに、これが実際に正規表現を解析するよりも効率的であるとしても、私は驚かないでしょう。

このソリューションを見てみましょう。

if ( $value =~ /-1|[1-9][0-9]*/ ) {
    ....
}

これは一致-1し、一致しますが、一致し42ません0。ただし、 と にも一致-13441vvvます。また、どちらがアラビア語٢٤の整数であるかは一致しません。42

プログラミングのほとんどは、機能の追加、バグの追跡など、プログラムを維持するのはあなた (またはあなたの後を追う貧しい吸盤) です。

あまりにも包丁になろうとしないでください。入力に必要な行数が少ないからといって、より効率的または優れているとは限りません。

于 2013-08-23T18:47:19.040 に答える
1

次のようなパターンを使用できます。

-1|[1-9][0-9]*

これは、リテラル-1または 1 から 9 までの 1 桁の数字の後に、0 から 9 までの 0 個以上の数字が続くものと一致します。

この番号が入力文字列で許可される唯一のものであることを確認したい場合は、パターンの周りに開始 ( ^) および終了 ( $) アンカーを配置します。

^-1|[1-9][0-9]*$
于 2013-08-23T16:49:01.160 に答える