匹配带连字符和撇号的单词

时间:2016-03-23 22:54:31

标签: regex

我有以下正则表达式匹配单词:

\w+(?:'|\-\w+)?

对于以下字符串:

' 's yea' don't -yeah no- ice-cream '

它给出了以下匹配:

s yea' don't yeah no ice-cream

但是,我想要以下匹配:

's yea' don't yeah no ice-cream

因为一个单词可以以撇号开头或结尾但不能用连字符开头或结尾。注意a'本身不应该匹配。

1 个答案:

答案 0 :(得分:5)

您的\w+(?:'|\-\w+)?开始与字词\w匹配,因此根据要求,所有以'开头的“字词”都不匹配。

您可以将\w'添加到字符类中并使用

'?\w[\w']*(?:-\w+)*'?

请参阅regex demo

如果“单词”只能包含1个连字符,请使用*量词替换最后的?

故障:

  • '? - 可选撇号
  • \w - 一个单词字符
  • [\w']* - 0+字符或撇号
  • (?:-\w+)* - 0+序列:
    • - - 连字符
    • \w+ - 1+字符
  • '? - 可选撇号