正则表达式仅在不是较长单词的一部分时检测单词?

时间:2012-05-16 16:40:12

标签: java regex

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

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

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

主要failure字符串不需要围绕它[\d\w-_]才能被视为部分

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

答案 2 :(得分:0)

正则表达式不是一个很好的例子。

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

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