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

C++ 匹配内部没有连字符的单词,c++,regex,C++,Regex,我需要一个正则表达式,允许字里面没有连字符。 例如,在字符串“非单词句子”中,它只应与“句子”匹配。 我写道: 但它失败了: 它不仅与“句”匹配,而且与“词”匹配 如何让它忽略里面有连字符的单词 这对你有用吗: (?<=[^\s])[a-zA-Z]*(?=[$\s]) (?好的,这里有一个用于PCRE(与Perl兼容的正则表达式系统,这意味着它们中的大多数): (? 让我为您详细介绍一下: (?:反向向后看--“下一个匹配的对象,请查看它前面的对象。如果是连字符,请忽略此匹配” \b[a

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

但它失败了:

它不仅与“句”匹配,而且与“词”匹配


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

这对你有用吗:

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

(?好的,这里有一个用于PCRE(与Perl兼容的正则表达式系统,这意味着它们中的大多数):

(?
让我为您详细介绍一下:

(?:反向向后看--“下一个匹配的对象,请查看它前面的对象。如果是连字符,请忽略此匹配”

\b[a-zA-Z]+\b
:一个词的边界,一个词,一个词的边界。我们的“东西”

(?![-])
:消极的前瞻--“匹配的对象,查看它后面的对象。如果是连字符,则忽略此匹配”


我最喜欢的在线正则表达式测试仪,RegExr .< /P>你使用的是哪种正则表达式引擎?PCRE?这是C++程序,就像你的标签状态?添加到@ JesseSmith的评论中,我也很好奇你使用的是哪一个引擎,因为没有C++标准库有工作正则表达式(我可能错了,在这种情况下我会很高兴被纠正)。C++ C++ 11 C++核心语言目前工作很快,但是标准的LIB是滞后的……@ SyAM:C++具有C++ 11的正则表达式支持,例如@ NateKohl:C++ 11规范具有正则表达式支持,但是SyAM是正确的,没有C++实现有工作正则表达式。目前有合理的支持。@Jesse Smith,我看你是对的,你知道为什么吗,我认为(?[^\s]将匹配任何非空白的内容。因此,一个积极的look-behind断言是“我的当前位置前面有任何非空白的内容吗?”这不是我们要问的。我们要问的是“我的当前位置前面没有连字符吗?”我刚刚注意到您的look-behind:$在字符类的上下文中表示其他内容,即plain旧的“$”。是否要使用字符串结尾分隔符?与字符类中的“^”相同。除了它的特殊含义--它表示否定。[^x]表示除文字字母“x”以外的任何内容。与\s相同。我相信[^\s]逻辑上等同于\SAhh,谢谢你的澄清,这是我的错,我将删除这个答案,因为它是非常错误的。也是的,我在寻找字符串或空格的开头/结尾。这一切都很好:断言和正则表达式通常都是非常狡猾的野兽。至少我们都学到了一些东西!)嘿,杰西,回顾过去+事情+展望未来真的很聪明。非常感谢!如果它解决了你的问题,你能接受这个问题吗?这将帮助将来有同样问题的人。

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