文字列が 3 つ以上の「0」で終わっていない場合にのみ、文字列に一致する正規表現を見つけようとします。直感的に、私は試しました:
.*[^0]{3,}$
ただし、文字列の末尾に 1 つまたは 2 つのゼロがある場合、これは一致しません。
文字列が 3 つ以上の「0」で終わっていない場合にのみ、文字列に一致する正規表現を見つけようとします。直感的に、私は試しました:
.*[^0]{3,}$
ただし、文字列の末尾に 1 つまたは 2 つのゼロがある場合、これは一致しません。
後読みアサーションなしで実行する必要がある場合 (つまり、JavaScript で):
^(?:.{0,2}|.*(?!000).{3})$
それ以外の場合は、hsz の回答を使用してください。
説明:
^ # Start of string
(?: # Either match...
.{0,2} # a string of up to two characters
| # or
.* # any string
(?!000) # (unless followed by three zeroes)
.{3} # followed by three characters
) # End of alternation
$ # End of string
否定的な後読みを使用してみることができます。つまり、次のようになります。
(?<!000)$
テスト:
Test Target String Matches
1 654153640 Yes
2 5646549800 Yes
3 848461158000 No
4 84681840000 No
5 35450008748 Yes
ただし、否定的な後読みはすべての言語でサポートされているわけではないことに注意してください。
これは、文字列があまり規則的ではないため(意味が何であれ)、正規表現があまり得意ではないことの1つです。私が思いついた唯一の方法は、あらゆる可能性を与えることでした。
.*[^0]..$|.*.[^0].$|.*..[^0]$
これは単純化して
.*([^0]|[^0].|[^0]..)$
3つの0で終わらない文字列だけが必要な場合は問題ありませんが、10の0で終わらない文字列は長くなります。しかしありがたいことに、この文字列はこれらの種類の組み合わせのいくつかよりも少し規則的であり、さらに単純化することができます。
.*[^0].{0,2}$