重写正则表达式以在Java中使用

时间:2019-03-10 17:28:03

标签: java regex

我写了(?<=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

2 个答案:

答案 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