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

Match words with no hyphen inside

本文关键字:连字符 单词      更新时间:2023-10-16

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

 "b(?!w+[-]w+)w+" 

它失败了:

它不仅匹配"句子",还匹配"单词"。

如何使其忽略包含连字符的单词?

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

(?<![-])b[a-zA-Z]+b(?![-])

让我为你分解一下:

(?<![-]):否定地看后面——"下一个匹配的东西,看它前面的东西。如果是连字符,忽略这个匹配"

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

(?![-]):否定的展望——"匹配的东西,看看它后面的东西。如果是连字符,忽略这个匹配"

它在我最喜欢的在线正则表达式测试程序RegExr中。

这对你有用吗:

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