11

文字列が 3 つ以上の「0」で終わっていない場合にのみ、文字列に一致する正規表現を見つけようとします。直感的に、私は試しました:

.*[^0]{3,}$

ただし、文字列の末尾に 1 つまたは 2 つのゼロがある場合、これは一致しません。

4

4 に答える 4

14

後読みアサーションなしで実行する必要がある場合 (つまり、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
于 2012-07-11T12:10:31.977 に答える
12

否定的な後読みを使用してみることができます。つまり、次のようになります。

(?<!000)$

テスト:

Test  Target String   Matches
1     654153640       Yes
2     5646549800      Yes   
3     848461158000    No
4     84681840000     No
5     35450008748     Yes   

ただし、否定的な後読みはすべての言語でサポートされているわけではないことに注意してください。

于 2012-07-11T11:13:12.300 に答える
1

これは、文字列があまり規則的ではないため(意味が何であれ)、正規表現があまり得意ではないことの1つです。私が思いついた唯一の方法は、あらゆる可能性を与えることでした。

.*[^0]..$|.*.[^0].$|.*..[^0]$

これは単純化して

.*([^0]|[^0].|[^0]..)$

3つの0で終わらない文字列だけが必要な場合は問題ありませんが、10の0で終わらない文字列は長くなります。しかしありがたいことに、この文字列はこれらの種類の組み合わせのいくつかよりも少し規則的であり、さらに単純化することができます。

.*[^0].{0,2}$
于 2012-07-11T11:15:36.010 に答える