正则表达式是什么?

时间:2015-08-30 10:20:08

标签: java regex string

我需要找到除字符串中的制表符(\ t)之外的任何字符的第一次出现的索引。我为此目的编写了以下代码 -

line = "    BD/SW_Pro_test";
Pattern pattern = Pattern.compile("[^\t]");
Matcher matcher = pattern.matcher(line);


System.out.println("MATCHES AT ... "+ matcher.group(1));

我不希望输出为 - 1吗? 这段代码有什么问题?

谢谢!

2 个答案:

答案 0 :(得分:1)

您似乎误解了groupCount方法返回的内容(对此并不感到沮丧,这是Java正则表达式初学者的常见误解)。

  

返回此匹配器模式中的捕获组数

换句话说,它返回模式中使用的捕获组的数量,而不是文本中找到的组的数量。

例如,如果我们有像(a)b(c+)捕获组那样的正则表达式

  • 第1组(a)
  • 第2组(c+)

因此此模式的groupCount将返回2

您似乎要搜索的内容类似于

Pattern p = Pattern.compile("yourRegex");
Matcher m = p.matcher(yourData);
while(m.find()){//this will iterate over your data and in each iteration handle single match
    //if you want to know about indexes of current match you can use m.start or m.start(groupID)
    String textFound = m.group();
    int position = m.start();
    //now you can handle data you found, 
    //like place them in some map which will remember match and its first position
}

答案 1 :(得分:0)

此代码对我有用。

while(matcher.find()) {
        System.out.println(matcher.start());
        break;
    }