java - 仅当字符未直接包含在所需字符串之前时,正则表达式才匹配

标签 java regex

我正在尝试解决 this CodingBat problem :

Return true if the given string contains an appearance of "xyz" where the xyz is not directly preceeded by a period (.). So "xxyz" counts but "x.xyz" does not.

xyzThere("abcxyz") → true
xyzThere("abc.xyz") → false
xyzThere("xyz.abc") → true

我正在尝试使用正则表达式解决此问题,但我不确定如何处理 xyz 前面没有直接加上句点 的要求。

对于没有约束的问题,我的解决方案是这样的:

public boolean xyzThere(String str) {
    return str.matches(".*xyz.*");
}

知道如何使用正则表达式处理上述约束吗?

最佳答案

否定字符类应该可以解决问题:str.matches(".*(?:^|[^.])xyz.*")

这里我们使用非捕获组 (?:^|[^.]) 来确保我们匹配字符串 ^ 的开头,或者在任何不是句点的位置 [^.]

关于java - 仅当字符未直接包含在所需字符串之前时,正则表达式才匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13441952/

相关文章:

java - 为什么Java不允许我通过同一个类的方法访问私有(private)方法?

java - java中的二维数组用于遍历行

Javamail API - 如何将 setFrom 更改为您想要的任何内容?

python - 在 python 数据框中查找正则表达式

jquery - 修复 RegEx 中的 JSLint 擒纵机构不良警告

java - 背包变化算法

java - 如何将 java 参数传递给 Jenkins 中的特定从站?

ruby - 如何用 MatchData 对象替换 Perl 风格的正则表达式

javascript - javascript 中的正则表达式lookbehind

javascript - 正则表达式替换 json 中的双引号