我需要一个正则表达式,允许其中没有连字符的单词。 例如,在一个字符串“非单词句子”中,它只能匹配“句子”。 我写道:匹配内部没有连字符的单词
"\b(?!\w+[-]\w+)\w+"
和失败:
它不仅是 “一句话”,但也 “字” 相匹配。
如何让它忽略带连字符的单词?
我需要一个正则表达式,允许其中没有连字符的单词。 例如,在一个字符串“非单词句子”中,它只能匹配“句子”。 我写道:匹配内部没有连字符的单词
"\b(?!\w+[-]\w+)\w+"
和失败:
它不仅是 “一句话”,但也 “字” 相匹配。
如何让它忽略带连字符的单词?
这会为你工作:
(?<=[^\s])[a-zA-Z]*(?=[$\s])
这不适用于RegExr。它只是匹配'word' –
@Jesse Smith,我看你是对的,你知道为什么,我认为(?<= [^ \ s])会强制它匹配字符串的开头或空白,所以它应该没有匹配的词。 – Jbad26
[^ \ s]将匹配任何不是空白的。所以一个积极的后视断言是说'是我的现在位置前面是什么而不是空白吗?'这不是我们所要求的。我们问'我的现在位置是不是以连字符开头?' –
好吧,这里是一个PCRE(Perl兼容正则表达式系统,这意味着大多数):
(?<![-])\b[a-zA-Z]+\b(?![-])
让我打破它对你来说:
(?<![-])
:负面后视 - “接下来的事情就是匹配,看看它的前面的事情,如果是连字符,忽略这个匹配”
\b[a-zA-Z]+\b
:单词边界,单词,单词边界。我们的'东西'。
(?![-])
:负前瞻 -
Here it is在我最喜爱的在线正则表达式测试仪,RegExr“相匹配,看的东西之后,如果这是一个连字符,忽略这场比赛的事情。”
嘿,杰西,后视+东西+前瞻是非常聪明的。很多谢谢! – eger
你能否接受问题是否解决了你的问题?这将有助于未来有同样问题的人。 –
您正在使用哪种正则表达式引擎? PCRE?这是针对C++程序的,因为你的标签说明了什么? –
要添加到@ JesseSmith的评论,我很好奇,因为你使用的是哪种引擎,AFAIK,没有C++标准库有工作正则表达式(我可能是错的,在这种情况下,我很乐意被纠正) 。现在C++ 11核心语言的工作已经非常成熟,但标准库已经落后了...... – syam
@syam:C++自C++ 11起支持正则表达式,例如C++ 11。 http://en.cppreference.com/w/cpp/regex –