我今天有另一个问题。我有一个设置为过滤某些数据的电子邮件设备,但它只能通过正则表达式执行此操作。我已经部分完成了thanks to this fine gentleman.我现在需要完成的事情有点复杂。我应该补充一点,我是正则表达式的完全新手。现在我正在使用它:
(?<!\d)(?!1000000)([1-7]\d{6}|8000000)(?!\d)
要查找1000001到8000000范围内的7位整数,我现在要做的是找到1000000到12000000000之间的整数,我可以通过简单地更改此处的部分来重新编写此代码
([1-7]\d{6}
但是根据我的理解,这需要我格式化5个单独的表达式来查找我需要的数据(我可能完全偏离此基础,但我不太了解正则表达式将此行更改为我需要的内容)。我更喜欢一个表达式来查找7-12位数字之间的数据并停在某个明确的12位数值。我怎么能做到这一点?
答案 0 :(得分: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}
从a
到m
次获得n
,允许前四个组合为一个。完整匹配的完整正则表达式看起来像
[1-9][0-9]{6,9}|1[01][0-9]{9}
然后你可以将其包裹在(?<![0-9])(...)(?![0-9])
中以允许搜索部分字符串。
这也与1000000
匹配,因此为了排除这一点,您可以使用您已经获得的相同(?!...)
构造,但修改为仍然允许1000000
后跟其他数字。< / p>
(?<![0-9])((?!1000000(?![0-9]))[1-9][0-9]{6,9}|1[01][0-9]{9})(?![0-9])
顺便说一句,我使用的是[0-9]
而不是\d
,因为我不知道你正在使用哪种正则表达方言。在某些方言中,\d
也匹配其他数字,而不是我们的0123456789。
答案 1 :(得分:0)
随着尘埃落定,我认为这是最简单的“可接受”范围,@ hvd关于使用\d
的警告:
\b([1-9]\d{6,9}|1[01]\d{9})\b
这包括1000000并且为了简单起见排除了12000000000。
答案 2 :(得分:0)
我可能会误解你的问题,但不仅仅是
^[1-9][0-9]{6,11}$
答案 3 :(得分:0)