1

我正在寻找一个只匹配一个单词的正则表达式,它不是更长单词的一部分。

让我们假设这个词是“失败”,所以这里有一些例子

  • failure bla bla- 应该匹配
  • bla failure.- 应该匹配
  • no-failure bla- 不应该匹配

主要是failure字符串不需要[\d\w-_]在它周围有任何东西才能被认为是一部分

4

3 回答 3

2

由于您将破折号包含在构成单词的字符组中,因此您不能使用单词边界来执行此操作;您需要环视断言(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
于 2012-05-16T16:47:46.090 回答
1

如果您的正则表达式支持它,您可以使用它\b来匹配分词,例如/\bfailure\b/.

于 2012-05-16T16:42:43.133 回答
0

对于正则表达式来说,这不是一个很好的案例。

为什么不 String.split 将其分解为单词,然后将每个单词与您的目标进行比较(因为您所说的是它应该只在被空格分隔时才匹配)。

好吧,String.split 确实使用了正则表达式,但它受到了更多的控制,你真的只需要默认的空间分割,或者你可能想添加句点(所以你的第二个例子会匹配)。

于 2012-05-16T18:40:15.680 回答