2017-05-24 118 views
1

我有此正则表达式图案正则表达式仅与在整个匹配的字符数最小匹配

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

和例如这主题

新平衡mrl420灰色 - 是新的平衡运动鞋面包车新平衡voor heren。德MRL420系列面包车新建...

所以这个匹配mrl420

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

新的平衡mrl420grey - 是埃恩strakke lichtgewicht运动鞋面包车纽巴伦VOOR和仁。德MRL420系列面包车新...

是应该给一个匹配。

我试过了,例如

(\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个字符或更多。

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

+0

尝试[\ b(?= [az \ d - ] {7})\ d?[az] * \ d + [az] * - ?\ d * [az] * \ d *'] (https://regex101.com/r/7SNFiU/1) –

+0

Olaf,它是否按预期工作?起始模式也可以写成'\ b(?= \ S {7})',但我不确定你想在字边界之后开始匹配子字符串。请确认。 –

+0

是否有最小尺寸匹配的模式?你能举一些例子吗?你需要的是每个部分的最小数量(数字,字母等) – Whothehellisthat

回答

0

您可以使用

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

regex demo

详细

  • \b - 单词边界
  • (?=[a-z\d-]{7}) - 立即字边界位置后,必须有7个字母:字母,d igits或-i大小写不敏感的调节剂可用于同时匹配大写和小写字母)
  • \d? - 1或0数字
  • [a-z]* - 0+字母
  • \d+ - 1+数字
  • [a-z]* - 零个或多个字母
  • -? - 一个可选的连字符
  • \d* - 0+位数
  • [a-z]* - 0+个字母
  • \d* - 0+个数字。