正则表达式只匹配整个匹配中的最小字符数

时间:2017-05-24 16:43:16

标签: regex

我有这个正则表达式模式

(\d?[a-z]*\d+[a-z]*-?\d*[a-z]*\d*)

和这个主题

new balance mrl420 grey - 是新的平衡运动鞋van New new voor heren。 De MRL420 serie van New ...

所以这匹配mrl420

但我想要的是它只会在整个匹配为7个字符或更多时返回匹配,所以在这种情况下它不应该匹配,但在这种情况下:

new balance mrl420grey - 是新的平衡运动鞋van New new voor heren。 De MRL420 serie van New ...

应该给出匹配。

我已尝试过,例如

(\d?[a-z]*\d+[a-z]*-?\d*[a-z]*\d*){7,} or (\d?[a-z]*\d+[a-z]*-?\d*[a-z]*\d*).{6,}

但这并没有提供正确的答案。似乎那7个字符的限制只适用于最后一个元素,在这种情况下是数字的数量?

那么如何得到我想要的结果呢?总结一下:

首先测试正则表达式模式匹配 如果它匹配则检查它是否有7个字符或更多。

当然,这可以分两个步骤完成,但也可以用一个表达式完成吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

\b(?=[a-z\d-]{7})\d?[a-z]*\d+[a-z]*-?\d*[a-z]*\d*

请参阅regex demo

<强>详情:

  • \b - 字边界
  • (?=[a-z\d-]{7}) - 在单词边界位置之后,必须有7个字符:字母,数字或-i不区分大小写的修饰符可用于匹配上下 - 大写字母)
  • \d? - 1位或0位
  • [a-z]* - 0+个字母
  • \d+ - 1+位数
  • [a-z]* - 零个或多个字母
  • -? - 一个可选的连字符
  • \d* - 0+位数
  • [a-z]* - 0+个字母
  • \d* - 0+位。