我需要一个正则表达式,允许在其中没有连字符的单词。 例如,在字符串“非单词句子”中,它应该只匹配“句子”。 我写道:
"\b(?!\w+[-]\w+)\w+"
它失败了:
它不仅匹配“句子”而且匹配“词”。
如何让它忽略里面用连字符的单词?
答案 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])