我需要一个正则表达式,允许其中没有连字符的单词。 例如,在一个字符串“non-word sentence”中,它应该只匹配“sentence”。 我写道:
"\b(?!\w+[-]\w+)\w+"
失败了:
不仅匹配“sentence”,还匹配“word”。
如何让它忽略里面有连字符的单词?
最佳答案
好吧,这是一个用于 PCRE(Perl 兼容的正则表达式系统,这意味着大多数):
(?<![-])\b[a-zA-Z]+\b(?![-])
让我为您分解一下:
(?<![-])
: Negative look-behind——“下一个匹配的东西,看它前面的东西。如果是连字符,忽略这个匹配”
\b[a-zA-Z]+\b
: 一个词界,一个词,一个词界。我们的“东西”。
(?![-])
: 消极的前瞻——“匹配的东西,看看它后面的东西。如果是连字符,忽略这个匹配”
Here it is在我最喜欢的在线正则表达式测试器 RegExr 中。
关于c++ - 匹配里面没有连字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580109/