我正在寻找一个只匹配一个单词的正则表达式,它不是更长单词的一部分。
让我们假设这个词是“失败”,所以这里有一些例子
failure bla bla
- 应该匹配bla failure.
- 应该匹配no-failure bla
- 不应该匹配
主要是failure
字符串不需要[\d\w-_]
在它周围有任何东西才能被认为是一部分
由于您将破折号包含在构成单词的字符组中,因此您不能使用单词边界来执行此操作;您需要环视断言(Java 支持):
(?<![\w-])failure(?![\w-])
应该这样做。
解释:
(?<![\w-]) # Assert no alphanumeric or dash before the current position
failure # Match "failure"
(?![\w-]) # Assert no alphanumeric or dash after the current position
如果您的正则表达式支持它,您可以使用它\b
来匹配分词,例如/\bfailure\b/
.
对于正则表达式来说,这不是一个很好的案例。
为什么不 String.split 将其分解为单词,然后将每个单词与您的目标进行比较(因为您所说的是它应该只在被空格分隔时才匹配)。
好吧,String.split 确实使用了正则表达式,但它受到了更多的控制,你真的只需要默认的空间分割,或者你可能想添加句点(所以你的第二个例子会匹配)。