Java:查找第一个正则表达式的索引
我需要更改一段代码,其中包括:Java:查找第一个正则表达式的索引,java,regex,Java,Regex,我需要更改一段代码,其中包括: string.indexOf("bc") 如果在“bc”前面加上字母“a”,那么解决方案将跳过“bc”的出现,如何改变这一点 我不想找到这些: abc 但仅限于: xbc 其中x可以是a以外的任何值(甚至是空的) 我想我可以设置一个条件,检查索引I-1==a,如果为true,再次调用indexOf方法。但我认为这不会产生非常漂亮的代码 使用正则表达式的解决方案会是什么样子 编辑:只是在看到一些回复后的提示。不仅可以获得正则表达式,还可以获得查找索引所需的API调
string.indexOf("bc")
如果在“bc”前面加上字母“a”,那么解决方案将跳过“bc”的出现,如何改变这一点
我不想找到这些:
abc
但仅限于:
xbc
其中x可以是a以外的任何值(甚至是空的)
我想我可以设置一个条件,检查索引I-1==a,如果为true,再次调用indexOf方法。但我认为这不会产生非常漂亮的代码
使用正则表达式的解决方案会是什么样子
编辑:只是在看到一些回复后的提示。不仅可以获得正则表达式,还可以获得查找索引所需的API调用。您可以使用带有负数的正则表达式:
使用正则表达式查找与条件匹配的字符串,然后查找该字符串的索引
int index = -1;
Pattern p = Pattern.compile("[^Aa]?bc");
Matcher m = p.matcher(string);
if (m.find()) {
index = m.start();
}
像这样的。其中“string”是您正在搜索的文本,“index”保存找到的字符串的位置。(如果找不到索引,则索引将为-1。)另外请注意,除非您设置了标志,否则该模式区分大小写。根据要求提供更完整的解决方案:
/** @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((?)添加到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((?反向查找似乎非常准确。太糟糕了,API中没有.indexOf(Regex)。@Hanswiner很抱歉,它应该是matcher.find()
(请参见?它很混乱:)。啊,这只是一个输入错误,我现在应该接受哪个版本?Regex表达式中还有一个输入错误(坦白说,如果无法检索字符串中找到的模式的起始索引或结束索引,那么查找与reg exp的匹配项有什么意义?这就是我拒绝使用模式和匹配器类的原因。它太神秘,而且比帮助更令人沮丧和浪费时间。你必须逐个char.Y清理字符串。)我保证,我的编辑更多的是对只包含一个正则表达式的答案的响应。但无论如何,谢谢你,这看起来很不错。如果你想在上面做索引,你可以做:public static int indexOf(String regex,String s,int index){Pattern Pattern=Pattern.compile(regex);Matcher Matcher=Pattern.Matcher(s);返回Matcher.find(index)?Matcher.start():-1;}…int index=indexOf((?)?
/** @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");
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);