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