我正在尝试获取代码之间的内容。所以我也为此制作了正则表达式。
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
请指出我犯错的地方。
答案 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");
}
}