-1 または任意の正の整数 (ただし 0 ではない) のいずれかの整数と一致する必要があります。これは正規表現を使用して可能になるはずですが、私はいつも把握するのが難しいと感じていました.
誰かがそれを一致させる方法を教えてくれ、同時に適切な説明を提供してくれると非常にありがたいので、私は何かを学びます.
ありがとう。
あまりにも包丁になろうとしないでください。私は単にこれを行います:
if (( $value == int( $value ) and $value > 0 ) or $value == -1 ) {
....
}
また、エラーが発生しやすい正規表現は避けてください。特に複雑すぎる場合はそうです。
これにより、あなたが何を望んでいるかが完全に明確になります。0 より大きい、または-1 の整数が必要です。さらに、これが実際に正規表現を解析するよりも効率的であるとしても、私は驚かないでしょう。
このソリューションを見てみましょう。
if ( $value =~ /-1|[1-9][0-9]*/ ) {
....
}
これは一致-1
し、一致しますが、一致し42
ません0
。ただし、 と にも一致-1344
し1vvv
ます。また、どちらがアラビア語٢٤
の整数であるかは一致しません。42
プログラミングのほとんどは、機能の追加、バグの追跡など、プログラムを維持するのはあなた (またはあなたの後を追う貧しい吸盤) です。
あまりにも包丁になろうとしないでください。入力に必要な行数が少ないからといって、より効率的または優れているとは限りません。
次のようなパターンを使用できます。
-1|[1-9][0-9]*
これは、リテラル-1
または 1 から 9 までの 1 桁の数字の後に、0 から 9 までの 0 個以上の数字が続くものと一致します。
この番号が入力文字列で許可される唯一のものであることを確認したい場合は、パターンの周りに開始 ( ^
) および終了 ( $
) アンカーを配置します。
^-1|[1-9][0-9]*$