1

这可能只是通常的“哦,别看另一个人要求正则表达式”,但我真的无法弄清楚这一点。我需要做的是找到一个简单的正则表达式,它可以匹配任何大于或小于 3 位的数字。它也必须匹配字符。

只是一点解释。我正在尝试匹配不是电话号码标准区号的任何内容。所以 > 3 < 包括字符。我将其用于业务规则,并且已经匹配了区号的正版本。

一次只有一条记录通过正则表达式,因此不需要分隔符。

好的,对不起,这里有一些例子:

337   : does not match
123   : does not match
12    : does match
1     : does match
asd   : does match
as2   : does match
12as45: does match
1234  : does match

相反的很简单,可以是 [0-9]{3} 或 [\d]{3}。

PS它在java中

4

3 回答 3

3

现在这是“az”的解决方案(因为它似乎很常见):

^(?!\d{3})[a-z0-9]{3}$|^[a-z0-9]{1,2}$|^[a-z0-9]{4,}$

...这是真正的解决方案,它匹配除了三个全为数字的字符之外的所有内容:

^(?!\d{3}).{3}$|^.{1,2}$|^.{4,}$

http://regexr.com?358u9

因为我们只是检查三个备选方案,所以很容易解释。

于 2013-06-18T07:32:16.823 回答
1

你可以这样做

^(?:(?!(?<!\d)\d{3}(?!\d))[a-zA-Z\d])+$

在 Regexr 上查看。

解释

^                                # match the start of the string (not needed with the matches() method)
    (?:                          # start of a non capturing group
        (?!(?<!\d)\d{3}(?!\d))   # combined lookarounds, fails if there are 3 digits following with not a digit before and ahead of those 3 digits
        [a-zA-Z\d]               # match one ASCII letter or digit
    )+                           # repeat this at least once
$                                # match the end of the string (not needed with the matches() method)
于 2013-06-18T08:00:45.347 回答
-1

在 \d{3} 后面使用负面观察:http ://www.regular-expressions.info/lookaround.html

于 2013-06-18T07:18:46.510 回答