我是Regex的新手,我一直试图这样做而没有任何运气。我做错了什么?
/^([^0]{2}[^0]{2})$/gm
它只选择第一个。
valid:
1234 <--
0101
1001
invalid
1200
0012
0000
2131sdf
sdf2343
答案 0 :(得分:2)
这就是你要找的东西:
/^(?!0{2})[0-9]{4}(?<!0{2})$/gm
这使用负前瞻(?!...)
和负后瞻(?<!...)
来断言在字符串开头后没有两个0
s(0{2}
)({ {1}})并在字符串结束之前(^
)。 Lookarounds是零长度断言,意味着它们不匹配任何字符(就像$
和^
)。因此,在这些断言之间,我们仍然需要匹配4位数($
)。
答案 1 :(得分:2)
您可以使用以下使用Negative Lookahead的正则表达式。
^(?!00|.*00$)\d{4}$
说明:
^ # the beginning of the string
(?! # look ahead to see if there is not:
00 # '00'
| # OR
.* # any character except \n (0 or more times)
00 # '00'
$ # before an optional \n, and the end of the string
) # end of look-ahead
\d{4} # digits (0-9) (4 times)
$ # before an optional \n, and the end of the string
答案 2 :(得分:0)
这就是你要找的东西:
/^(?!0{2})[0-9]{4}(?<!0{2})$/gm
这使用负向前瞻(?!...
)和负后瞻(?<!...
)来断言在字符串开始后没有两个0(0{2}
)(^)在字符串结束之前($
)。
Lookarounds是零长度断言,意味着它们不匹配任何字符(就像^
和$
)。因此,在这些断言之间,我们仍然需要匹配4位数([0-9]{4}
)。
答案 3 :(得分:0)