c++ - 匹配里面没有连字符的单词

标签 c++ regex

我需要一个正则表达式,允许其中没有连字符的单词。 例如,在一个字符串“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/

相关文章:

Python正则表达式替换不应该匹配的字符串

c++ - 是否存在将 double 转换为 long long 的优雅方法?

c++ - 包含指向自身的 "implementation"和 "interface"指针的 C++ 类有什么用?

regex - grep -v pattern 并删除之前的 1 行和之后的 4 行

java - 正则表达式 - 捕获重复数字(不是数字)

regex - Jenkins中的日志解析规则

python - python 中的正则表达式不起作用

c++ - 如何在 box2d 中进行碰撞连接

c++ - 将面板添加到 MFC 应用程序 (Visual Studio C++)

c++ - 为什么 nvcc 无法使用 boost::spirit 编译 CUDA 文件?