この正規表現は、preg_match^.*.*.*.*.*.*00
でこの数値に対して true を返します。10102001
最初の7つの数字をキャッチすることはわかっていますが、最後の数字が0でない場合、結果は偽であり、真ではありません。これが必要です。この数の場合、正規表現は期待どおりに機能します (false): 10102011
10102001 -- true why?
10102011 -- false
正規表現の何が問題になっていますか?
この正規表現は、preg_match^.*.*.*.*.*.*00
でこの数値に対して true を返します。10102001
最初の7つの数字をキャッチすることはわかっていますが、最後の数字が0でない場合、結果は偽であり、真ではありません。これが必要です。この数の場合、正規表現は期待どおりに機能します (false): 10102011
10102001 -- true why?
10102011 -- false
正規表現の何が問題になっていますか?
.*
は、改行以外の任意の文字の 0 個以上に一致します。あなたの正規表現は、実際には単に書くことと同等^.*00
です。「10102001」の中に部分文字列「1010200」があるので一致します。
^.{6}00
( と同じです) のような^......00
ものが必要になります。さらに良いことに、より具体的にして、数字のみを前に付けるように指定することをお勧めします。だから^[0-9]{6}00
。また、最後の 0 が行またはターゲット文字列の最後にあることを確認する必要がある場合は、$ を追加します。^.{6}00$
10102001 -- 本当の理由は?
文字列の末尾に一致しないため、正規表現は末尾の前のどこかに 00 があるものと一致します (ゼロの後に何かが続く可能性があります)。また、*
は「0 個以上」を意味し.*
、空文字列、10 文字、4 文字、1 文字など、何にでも一致することを意味します。
以下は、7 文字で始まり 2 つのゼロで終わるすべて (合計 9 文字) をキャッチする正規表現です。
^.......00$
あなたの正規表現はあらゆる種類のめちゃくちゃです。最後の 5.*
秒は無意味^.*00
です。同じことを行います。
10102001
部分文字列 と一致するため、真です1010200
。最後に 1 を残しています。文字列全体と一致するかどうかを確認したい場合は、これを使用します^.*00$
。
これがあなたの正規表現がしていることです。最後にa を追加し$
て、どのように機能するかを確認します。
http://www.regex101.com/r/wK3qI1
制約を投稿していないため、正規表現がそれ以外の方法について推奨することはできません。
これはあなたにとって正しい正規表現であるはずです:
[0-9]{7}0$