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

我已经编写(?<=pp_).*(?=')了正则表达式来匹配pp_字符串中的内容,例如


['newPage', 'pp_vii', -1]


我的正则表达式在在线测试器中运行良好(请参阅在线正则表达式验证器),但在 Java 中却不行。我失败的代码:


Pattern pattern = Pattern.compile("(?<=pp_).*(?=')");

String input = "['newPage', 'pp_vii', -1])";

Matcher m = pattern.matcher(input);

boolean match = m.matches(); // false


沧海一幻觉
浏览 100回答 2
2回答

偶然的你

该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();&nbsp;if(a){&nbsp; &nbsp; String out = m.group();&nbsp; &nbsp; System.out.println("Match : " + out);}

慕仙森

你的正则表达式很好。Matcher.matches()如果完整的 String 与模式 ( docs )匹配,则该方法仅返回 true。你应该Matcher.find()改用。这会找到与模式 ( docs ) 匹配的下一个子序列。Pattern pattern = Pattern.compile("(?<=pp_).*(?=')");String input = "['newPage', 'pp_vii', -1])";Matcher m = pattern.matcher(input);boolean stringMatches = m.matches(); // falseboolean isThereMatch = m.find(); // trueSystem.out.println(isThereMatch + " " + stringMatches);System.out.println(m.group());打印:true falsevii
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java