Java:查找第一个Regex的索引

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

string.indexOf("bc") 

怎么能通过一个跳过“bc”出现的解决方案来改变它,如果它前面有字母“a”。

我不想找到这些:

ABC

但只有:

命苦

其中x可以是任何东西,但是(甚至是空的)。

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

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

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

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

  /** @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("(? 

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

 (? 

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

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

使用正则表达式查找符合条件的字符串,然后查找该字符串的索引。

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

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

要添加到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("(?