如何获得正则表达式模式以连续匹配?

时间:2018-08-30 12:37:49

标签: regex

考虑这个简单的例子

http://time.com/this-time-is-different

在这里,我想匹配诸如this-time-is-different之类的序列。

也就是说,单词的任何序列后跟-,该序列至少重复3次。因此,在示例中,序列word-仅对this-time-is-different

重复了3次

但是,当我使用[-\w]{3,}时,会得到太多的匹配项,例如http,甚至没有跟着-

enter image description here

这是怎么了? 谢谢!

1 个答案:

答案 0 :(得分:1)

[-\w]{3,}模式是与连字符字符char连续三个或更多连续出现的character class。因此,它匹配-----w--wwd234_23---,例如字符串等。您会发现,这些字符可能以任何顺序出现。

您可以在此处使用分组构造:

\w+(?:-\w+){2,}

请参见regex demo。在这里,(?:-\w+){2,}non-capturing group,它匹配2个或多个连续出现的连字符,后跟一个或多个单词字符。

详细信息

  • \w+-一个或多个字母,数字或_
  • (?:-\w+){2,}-与2个或更多连续出现的匹配的非捕获组
    • --连字符
    • \w+-一个或多个字母,数字或_

如果-可以连续出现,例如a--b----d,则可以在+之后应用-来匹配1个或多个匹配项:

\w+(?:-+\w+){2,}

请参见another regex demo

通过分组构造,您仍然可以确保-应该出现在至少1个字符的字符之后,并且必须跟随至少1个字符的字符。