Java:查找第一个Regex的索引

时间:2012-06-26 19:02:23

标签: java regex

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

string.indexOf("bc")

如果前面跟着字母“a”,跳过“bc”出现的solutin怎么能改变呢。

我不想找到这些:

ABC

但仅限:

XBC

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

我想我可以放入检查索引i-1 == a的条件,如果是,则再次调用indexOf方法。但我认为这不会产生非常漂亮的代码。

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

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

4 个答案:

答案 0 :(得分: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;
}

呼叫:

int index = indexOf(Pattern.compile("(?<!a)bc"), "abc xbc");

答案 1 :(得分:3)

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

(?<!a)bc

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

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

答案 2 :(得分:1)

使用regex查找符合条件的String,然后找到该String的索引。

int index = -1;
Pattern p = Pattern.compile("[^Aa]?bc");
Matcher m = p.matcher(string);
if (m.find()) {
    index = m.start();
}

像这样的东西。 'string'是您正在搜索的文本,'index'包含找到的字符串的位置。 (如果未找到索引,则为-1。)另请注意,除非设置标记,否则模式区分大小写。

答案 3 :(得分:0)

要添加到Arne的答案 - 如果您还要添加索引:

public static int indexOf(String regex, String s, int index)
{
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(s);
    return matcher.find(index) ? matcher.start() : -1;
}

呼叫:

int index = indexOf("(?<!a)bc", "abc xbc", 2);