2016-03-23 30 views
1

我有一个匹配的词下面的正则表达式:用连字符匹配的单词和撇号

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

对于下面的字符串:

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

它提供了以下比赛:

syea'don'tyeahnoice-cream

不过,我想下面的比赛:

'syea'don'tyeahnoice-cream

因为一个字可以启动或撇号结束,但不能用连字符。请注意,'自己不应该匹配。

+0

_Since一个字可以启动或使用连字符,但不与apostrophe._违背你的比赛结束。 's'和'yea''开头和结尾都是撇号。 –

+0

@noob正确,我已经解决了这个问题! – Baz

回答

4

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

您可以包括\w'为角色类,并使用

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

regex demo

如果一个“字”只能有1个连字符,在与?末取代*量词。

击穿:

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

这将匹配一个'自己。我不希望与此相匹配。 – Baz

+0

我更新了另一个模式,但也许你也可以尝试['(?:\ B'\ b)?\ w +(?:[ - '] \ w +)*(?:\ b'\ B)?' ](https://regex101.com/r/rN7hV8/3) –

相关问题