首页 > 解决方案 > 正则表达式匹配至少 6 位数字,最多只有 3 位数字不同于 0

问题描述

编辑

我需要识别至少 6 位和最多 25 位的所有数字,其中只有 1 到 3 位不同于 0。

示例:000123、0103040000、10320000、70000000、12000009000

我正在尝试这样的事情:

regexp_like(number, '[1-9]\d{1,3}') AND regexp_like(number,'(0){5,24}')

(可以使用多个正则表达式)

但这也匹配以下数字:

0046700000031,00394000007 - 这不应该匹配,因为它们有 4 位不是 0,它必须匹配最少 1 位不是 0 和最多 3 位不是 0 的数字

我正在使用 Oracle 12C。

解决方案

这是我发现的另一种选择,它似乎有效,但我认为只在 Oracle 中有效。

SELECT NUMBER
FROM TABLE t
WHERE LENGTH(NUMBER) > 5 HAVING(regexp_count(NUMBER, '0') > 2
      AND regexp_count(NUMBER, '[1-9]') BETWEEN 1 AND 3)
GROUP BY NUMBER

谢谢

标签: regexoracle12c

解决方案


试试这个模式(?=^([123456789]*0){1,3}[123456789]*$)\d{6,25}

解释:它使用前瞻来验证后面的内容最多包含三个零,模式为:(?=^([123456789]*0){1,3}[123456789]*$)

演示


推荐阅读