1

この正規表現は、preg_match^.*.*.*.*.*.*00でこの数値に対して true を返します。10102001

最初の7つの数字をキャッチすることはわかっていますが、最後の数字が0でない場合、結果は偽であり、真ではありません。これが必要です。この数の場合、正規表現は期待どおりに機能します (false): 10102011

10102001 -- true why?
10102011 -- false

正規表現の何が問題になっていますか?

4

4 に答える 4

5

.*は、改行以外の任意の文字の 0 個以上に一致します。あなたの正規表現は、実際には単に書くことと同等^.*00です。「10102001」の中に部分文字列「1010200」があるので一致します。

^.{6}00( と同じです) のような^......00ものが必要になります。さらに良いことに、より具体的にして、数字のみを前に付けるように指定することをお勧めします。だから^[0-9]{6}00。また、最後の 0 が行またはターゲット文字列の最後にあることを確認する必要がある場合は、$ を追加します。^.{6}00$

于 2013-03-04T17:44:38.970 に答える
2

10102001 -- 本当の理由は?

文字列の末尾に一致しないため、正規表現は末尾の前のどこかに 00 があるものと一致します (ゼロの後に何かが続く可能性があります)。また、*は「0 個以上」を意味し.*、空文字列、10 文字、4 文字、1 文字など、何にでも一致することを意味します。

以下は、7 文字で始まり 2 つのゼロで終わるすべて (合計 9 文字) をキャッチする正規表現です。

^.......00$
于 2013-03-04T17:42:30.313 に答える
1

あなたの正規表現はあらゆる種類のめちゃくちゃです。最後の 5.*秒は無意味^.*00です。同じことを行います。

10102001部分文字列 と一致するため、真です1010200。最後に 1 を残しています。文字列全体と一致するかどうかを確認したい場合は、これを使用します^.*00$

これがあなたの正規表現がしていることです。最後にa を追加し$て、どのように機能するかを確認します。

http://www.regex101.com/r/wK3qI1

制約を投稿していないため、正規表現がそれ以外の方法について推奨することはできません。

于 2013-03-04T17:41:38.647 に答える
0

これはあなたにとって正しい正規表現であるはずです:

[0-9]{7}0$
于 2013-03-04T17:43:03.880 に答える