获取匹配字符串的索引与正则表达式

时间:2014-02-21 12:23:14

标签: java regex string

我正在尝试获取代码之间的内容。所以我也为此制作了正则表达式。

    final String REGEX_BOLD_END = ".*[<][/][B|b][>].*";
    String input = "<B>Contetnt here</B>";
    Pattern pattern_start = Pattern.compile(".*[<][B|b][>].*");
    Matcher matcher_start = pattern_start.matcher(input);
    Pattern pattern_end = Pattern.compile(REGEX_BOLD_END);
    Matcher matcher_end = pattern_end.matcher(input);
    System.out.println("Tag open");
    if (matcher_start.matches()) {
        System.out.println("At:" + matcher_start.start() + "\tTo:" + matcher_start.end());
        System.out.println(matcher_start.group(0));
    } else {
        System.out.println("Not matched");
    }
    System.out.println("Tag Close");
    if (matcher_end.matches()) {
        System.out.print("At:" + matcher_end.start() + "\tTo:" + matcher_end.end());
    } else {
        System.out.println("Not matched");
    }

我的目标是获得Content here。所以我想要获取开始和结束索引,然后从原始输入中获​​取子字符串。但我得到了一些我没想到的东西。

输出:

Tag open

At:0    To:20
<B>Contetnt here</B>
Tag Close
At:0    To:20

请指出我犯错的地方。

1 个答案:

答案 0 :(得分:2)

如果您正在考虑使用与正则表达式相关的子字符串,那么您做错了。正则表达式的重点是打扰索引或子串。

请改为尝试:

Pattern p = Pattern.compile("<[b|B]>(.*)</[b|B]>");
Matcher m = p.matcher(textToMatch);
if (m.find()) {
    String firstMatch = m.group(1);
}

编辑:完成编译命令行程序,输出“Yay!”当输入是“&lt; b&gt; yay!&lt; / b&gt;”时根据要求。

import java.util.regex.*;
class Test {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("<[b|B]>(.*)</[b|B]>");
        Matcher m = p.matcher(args[0]);
        if (m.find()) {
            System.out.println(m.group(1));
        }
        else System.out.println("No match");
    }
}