负正则表达式

时间:2016-10-17 09:33:49

标签: regex

我是Regex的新手。

我创建了一个正则表达式:

.*\d{8,}.*\r?\n

当他们有8位或更多位时会删除这些行,但我希望它能在相反的情况下工作。

我想删除少于8位的人。

我知道它可能很简单,但我无法找到如何做到这一点。

你能帮我复习一下吗?

3 个答案:

答案 0 :(得分:2)

这应该有效:

^(\D*\d\D*){0,7}$

它允许线上有许多非数字字符(\D),但确保不超过7位。

答案 1 :(得分:2)

我用

^(?:\D*\d){0,7}\D*$

请参阅regex demo

<强>详情:

  • ^ - 字符串的开头
  • (?:\D*\d){0,7} - 0到7序列:
    • \D* - 0+非数字
    • \d - 数字
  • \D* - 0+非数字
  • $ - 字符串结束。

由于开始时的\D*包含在非捕获组中(因此“重复”),并且最后一个不在组内(不是“重复”) “)模式是线性执行的,并且不会造成太大的减速,因为引擎不需要考虑将哪个组放置非数字符号。

答案 2 :(得分:0)

使用否定前瞻:

^(?!.*\d{8,}.*).*$