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("(?