Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Regexp是否仅在单词不是较长单词的一部分时检测该单词?_Java_Regex - Fatal编程技术网

Java Regexp是否仅在单词不是较长单词的一部分时检测该单词?

Java Regexp是否仅在单词不是较长单词的一部分时检测该单词?,java,regex,Java,Regex,我正在寻找一个正则表达式,将只匹配一个字,它不是一个较长的字的一部分 让我们假设这个词是‘失败’,这里有一些例子 故障bla bla-应匹配 bla故障。-应匹配 无故障bla-不应匹配 主要是failure字符串周围不需要任何[\d\w-\u]就可以被视为一部分如果你喜欢的正则表达式支持它,你可以使用\b匹配分词符,例如/\bfailure\b/因为你将破折号包含在组成一个单词的字符组中,你不能用词的界限;您需要lookaround断言(Java支持): (? 我应该这样做 说明: (?&

我正在寻找一个正则表达式,将只匹配一个字,它不是一个较长的字的一部分

让我们假设这个词是‘失败’,这里有一些例子

  • 故障bla bla
    -应匹配
  • bla故障。
    -应匹配
  • 无故障bla
    -不应匹配

主要是
failure
字符串周围不需要任何
[\d\w-\u]
就可以被视为一部分如果你喜欢的正则表达式支持它,你可以使用
\b
匹配分词符,例如
/\bfailure\b/
因为你将破折号包含在组成一个单词的字符组中,你不能用词的界限;您需要lookaround断言(Java支持):

(?
我应该这样做

说明:

(?<![\w-])  # Assert no alphanumeric or dash before the current position
failure     # Match "failure"
(?![\w-])   # Assert no alphanumeric or dash after the current position

(?对于正则表达式来说不是一个很好的例子

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


嗯,String.split确实使用正则表达式,但它更受控制,您实际上只需要默认的空间拆分,或者您想添加句点(这样您的第二个示例就会匹配)。

出于好奇,在JavaScript中实现这一点的方法可能是
(?=[^\w-]failure[^\w-])
。可能字符串的结尾和开头也必须合并。对此有什么想法吗(因为它会测试每个位置,我认为它可能不好)?@FelixKling:嗯,其中之一是它将无法匹配字符串开头或结尾处的
失败。是的,我刚刚编辑了关于这一点的评论;)虽然这可以通过
([^\w-]|^)
(和
$
)轻松解决。但我认为可能还有其他服务器问题…
(?:^ |[^\w-])故障(?![^\w-]))
可以。当然,匹配结果将包括失败之前的角色。对,这更容易…我只是在想如何在JS中模拟负面落后。无论如何,谢谢!
(?<![\w-])  # Assert no alphanumeric or dash before the current position
failure     # Match "failure"
(?![\w-])   # Assert no alphanumeric or dash after the current position