Java:lastindexOf的正则表达式

时间:2013-09-30 06:27:43

标签: java regex

我的示例代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    /**
     * @param args
     */

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String str[] = {"A","B","C"};
        String s = "TEST FOR A STRING CONSTANT B. END.";
        int retIndex = -1;

        for (int i = 0, len = str.length; i < len; i++){ 
            //length-1 is because, we should not check the empty space unicode(\u0021)

            int index = s.lastIndexOf(str[i]);
            if(index>retIndex){
                retIndex = index;
            }
        }
        System.out.println("RETINDEX"+retIndex);

        Pattern pattern = Pattern.compile("A|B|C");
        Matcher m = pattern.matcher(s);

        while(m.find()){
            retIndex = m.start();
            System.out.println(m.group()+" : "+m.end()+" : "+m.start());
        }

        System.out.println("REGEX RETINDEX"+retIndex);
    }
}

我得到了输出:

RETINDEX27
A : 10 : 9
C : 19 : 18
A : 24 : 23
B : 28 : 27
REGEX RETINDEX27

我只想要最大索引输出。无需执行其他三个循环。如何根据我的需要改变上面的一个?正则lastindexOf与regularExpression匹配。

由于

1 个答案:

答案 0 :(得分:9)

你可以通过为它之前的所有内容写一个贪婪的匹配来找到最后一个正则表达式,例如:

.*(A|B|C)

鉴于您的测试字符串,.*将匹配最后一个B的所有内容,您可以从捕获组中获取B.

要访问捕获组,请使用带有int参数的方法:

    Pattern pattern = Pattern.compile(".*(A|B|C)");
    Matcher m = pattern.matcher(s);
    if (m.find()) {
        retIndex = m.start(1);
        System.out.println(m.group(1)+" : "+m.end(1)+" : "+m.start(1));
    }