我写了(?<=pp_).*(?=')
的正则表达式,以匹配pp_
之后的字符串
['newPage', 'pp_vii', -1]
我的正则表达式在在线测试人员中可以正常工作(请参见online regex validator),但在Java中却不能。我失败的代码:
Pattern pattern = Pattern.compile("(?<=pp_).*(?=')");
String input = "['newPage', 'pp_vii', -1])";
Matcher m = pattern.matcher(input);
boolean match = m.matches(); // false
答案 0 :(得分:1)
matches()
方法检查字符串的完整匹配,因此,请使用find()
方法检查子序列的匹配。最后,您可以使用group()
方法来获取匹配的子序列字符串。
public static void main(String[] args) {
Pattern pattern = Pattern.compile("(?<=pp_).*(?=')");
String input = "['newPage', 'pp_vii', -1])";
Matcher m = pattern.matcher(input);
boolean a = m.find();
if(a){
String out = m.group();
System.out.println("Match : " + out);
}
答案 1 :(得分:0)
您的正则表达式很好。如果完整的String匹配模式(docs),则Matcher.matches()
方法仅返回true。您应该改用Matcher.find()
。找到与模式(docs)匹配的下一个子序列。
Pattern pattern = Pattern.compile("(?<=pp_).*(?=')");
String input = "['newPage', 'pp_vii', -1])";
Matcher m = pattern.matcher(input);
boolean stringMatches = m.matches(); // false
boolean isThereMatch = m.find(); // true
System.out.println(isThereMatch + " " + stringMatches);
System.out.println(m.group());
打印:
true false
vii