考虑这个简单的例子
http://time.com/this-time-is-different
在这里,我想匹配诸如this-time-is-different
之类的序列。
也就是说,单词的任何序列后跟-
,该序列至少重复3次。因此,在示例中,序列word-
仅对this-time-is-different
但是,当我使用[-\w]{3,}
时,会得到太多的匹配项,例如http
,甚至没有跟着-
这是怎么了? 谢谢!
答案 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,}
通过分组构造,您仍然可以确保-
应该出现在至少1个字符的字符之后,并且必须跟随至少1个字符的字符。