Java:查找第一个Regex的索引

Han*_*ner 5 java regex

我需要更改一段代码包括:

string.indexOf("bc")
Run Code Online (Sandbox Code Playgroud)

如果前面有字母"a",那么如何通过跳过"bc"出现的solutin来改变这一点.

我不想找到这些:

ABC

但是只有:

命苦

其中x可以是除了(甚至是空的)之外的任何东西.

我想我可以放入一个条件来检查索引i-1 == a,如果是,则再次调用indexOf方法.但我不认为这将导致非常漂亮的代码.

使用正则表达式的解决方案如何?

编辑:看到一些回复后只是一个提示.不仅可以获得正则表达式,而且还可以获得查找索引所需的API调用.

Arn*_*rne 16

根据要求提供更完整的解决方案

    /** @return index of pattern in s or -1, if not found */
public static int indexOf(Pattern pattern, String s) {
    Matcher matcher = pattern.matcher(s);
    return matcher.find() ? matcher.start() : -1;
}
Run Code Online (Sandbox Code Playgroud)

呼叫:

int index = indexOf(Pattern.compile("(?<!a)bc"), "abc xbc");
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 5

您可以使用带有负lookbehind的正则表达式:

(?<!a)bc
Run Code Online (Sandbox Code Playgroud)

不幸的是,在 Java 中使用 Regex 进行重现.indexOf仍然是一团糟:

Pattern pattern = Pattern.compile("(?!a)bc");
Matcher matcher = pattern.matcher("abc xbc");
if (matcher.find()) {
    return matcher.start();
}
Run Code Online (Sandbox Code Playgroud)