Regex 用连字符和撇号匹配单词

Regex 用连字符和撇号匹配单词,regex,Regex,我有以下匹配单词的正则表达式: \w+(?:'|\-\w+)? 对于以下字符串: ' 's yea' don't -yeah no- ice-cream ' 它提供以下匹配项: s是的不要是的不冰淇淋 但是,我想要以下匹配项: 的是的不要是的不冰淇淋 因为单词可以以撇号开头或结尾,但不能以连字符结尾。注:a'本身不应匹配 您的\w+(?:'\-\w+)开始与一个单词字符\w匹配,因此所有以'开头的“单词”都不符合要求 您可以将\w和'包含到字符类中并使用 '?\w[\w']*(?:-\w+)

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

\w+(?:'|\-\w+)?
对于以下字符串:

' 's yea' don't -yeah no- ice-cream '
它提供以下匹配项:

s
是的
不要
是的
冰淇淋

但是,我想要以下匹配项:

是的
不要
是的
冰淇淋

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

您的
\w+(?:'\-\w+)
开始与一个单词字符
\w
匹配,因此所有以
'
开头的“单词”都不符合要求

您可以将
\w
'
包含到字符类中并使用

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

如果一个“单词”只能有一个连字符,请将末尾的
*
替换为
量词

细分:

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

因为单词可以以连字符开头或结尾,但不能以撇号开头或结尾。与你的比赛相矛盾<代码>的和是以撇号开头和结尾。@noob Correct,我现在已经解决了这个问题!这将单独与a匹配。我不希望与此匹配。我用另一个模式进行了更新,但也许您也可以尝试