匹配内部没有连字符的单词

时间:2013-07-10 20:16:23

标签: c++ regex

我需要一个正则表达式,允许在其中没有连字符的单词。 例如,在字符串“非单词句子”中,它应该只匹配“句子”。 我写道:

 "\b(?!\w+[-]\w+)\w+" 

它失败了:

它不仅匹配“句子”而且匹配“词”。

如何让它忽略里面用连字符的单词?

2 个答案:

答案 0 :(得分:3)

好的,这是一个用于PCRE(Perl兼容的正则表达式系统,这意味着大多数):

(?<![-])\b[a-zA-Z]+\b(?![-])

让我为你分解一下:

(?<![-]):负面的后卫 - “下一个匹配的东西,看看它之前的东西。如果它是一个连字符,请忽略这个匹配”

\b[a-zA-Z]+\b:单词边界,单词,单词边界。我们的“事情”。

(?![-]):负面的预测 - “匹配的东西,看看它后面的东西。如果是连字符,请忽略这个匹配”

Here it is在我最喜欢的在线正则表达式测试器中,RegExr。

答案 1 :(得分:0)

这对你有用吗?

(?<=[^\s])[a-zA-Z]*(?=[$\s])