我正在尝试使用正则表达式提取文本,但它无效。虽然我的正则表达式在正则表达式验证器上工作正常。
public class HelloWorld {
public static void main(String []args){
String PATTERN1 = "F\\{([\\w\\s&]*)\\}";
String PATTERN2 = "{([\\w\\s&]*)\\}";
String src = "F{403}#{Title1}";
List<String> fvalues = Arrays.asList(src.split("#"));
System.out.println(fieldExtract(fvalues.get(0), PATTERN1));
System.out.println(fieldExtract(fvalues.get(1), PATTERN2));
}
private static String fieldExtract(String src, String ptrn) {
System.out.println(src);
System.out.println(ptrn);
Pattern pattern = Pattern.compile(ptrn);
Matcher matcher = pattern.matcher(src);
return matcher.group(1);
}
}
答案 0 :(得分:0)
为什么不使用:
Pattern regex = Pattern.compile("F\\{([\\d\\s&]*)\\}#\\{([\\s\\w&]*)\\}");
同时获得两者?
这样,该号码将在群组1
中,而群组中的标题将为2
。
另一件事如果你要编译正则表达式(这对性能有帮助)至少使正则表达式对象保持静态,这样每次调用函数时它都不会被编译(哪种错过了整个函数)预编译点:))
基本演示here。
答案 1 :(得分:0)
第一个问题:
String PATTERN2 = "\\{([\\w\\s&]*)\\}"; // quote '{'
第二个问题:
Matcher matcher = pattern.matcher(src);
if( matcher.matches() ){
return matcher.group(1);
} else ...
必须要求匹配者耕田,否则你无法收获结果。