0

我今天还有一个问题。我有一个电子邮件设备,我正在设置它来过滤某些数据,但它只能通过正则表达式来做到这一点。多亏了这位好先生,我才部分完成了。我现在需要完成的事情有点复杂。我应该补充一点,我是正则表达式的新手。现在我正在使用这个:

(?<!\d)(?!1000000)([1-7]\d{6}|8000000)(?!\d)

要在 1000001 到 8000000 的范围内找到 7 位整数,我现在要做的是找到 1000000 到 12000000000 之间的整数,我可以通过简单地更改此处的部分来重新使用此代码

([1-7]\d{6}

但据我了解,这需要我格式化 5 个单独的表达式来找到我需要的数据(我可能对此完全不了解,但我对正则表达式知之甚少,无法将此行更改为我需要的内容)。我希望使用一个表达式来查找 7-12 位之间的数据并在某个明确的 12 位值处停止。我怎样才能做到这一点?

4

4 回答 4

1

1000000 到 12000000000(不包括)几乎可以是:

1000000 至 9999999:[1-9][0-9]{6}

10000000 至 99999999:[1-9][0-9]{7}

100000000 至 999999999:[1-9][0-9]{8}

1000000000 到 9999999999:[1-9][0-9]{9}

10000000000 到 11999999999:1[01][0-9]{9}

一些正则表达式语法变体允许从时间到任何地方,a{m,n}允许将其中的前四个组合为一个。完整匹配的完整正则表达式看起来像amn

[1-9][0-9]{6,9}|1[01][0-9]{9}

然后您可以将其包装起来(?<![0-9])(...)(?![0-9])以允许搜索部分字符串。

这也匹配1000000,因此要排除它,您可以使用(?!...)您已经拥有的相同构造,除了修改为仍然允许1000000后跟其他数字。

(?<![0-9])((?!1000000(?![0-9]))[1-9][0-9]{6,9}|1[01][0-9]{9})(?![0-9])

顺便说一句,我使用[0-9]而不是\d因为我不知道您使用的是哪种正则表达式方言。\d在某些方言中也匹配我们的 0123456789 以外的其他数字。

于 2013-09-19T19:41:50.970 回答
0

随着尘埃落定,我认为这是最简单的“可接受”范围,@hvd 关于使用的警告\d

\b([1-9]\d{6,9}|1[01]\d{9})\b

为了简单起见,这包括 1000000 并且不包括 12000000000。

于 2013-09-19T19:39:01.150 回答
0

我可能误解了你的问题,但不仅仅是

^[1-9][0-9]{6,11}$
于 2013-09-19T19:39:46.870 回答
0
^([1-9][0-9]{6,9}|1[0-2][0-9]{9})$

正则表达式可视化

调试演示

于 2013-09-19T19:49:40.093 回答