正则表达式中的贪婪匹配(java)
发布时间:2020-12-14 05:48:38 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 java regex对下面的输入进行标记.我相信我的表达式应该贪婪地匹配下面程序中的外部“exec”令牌. @Test public void test(){ String s = "exec(n" + " "command #1"n" + ","* * * * *" //cron stringn" + ","false" eq exec("comma
我正在尝试使用
java regex对下面的输入进行标记.我相信我的表达式应该贪婪地匹配下面程序中的外部“exec”令牌.
@Test public void test(){ String s = "exec(n" + " "command #1"n" + ","* * * * *" //cron stringn" + ","false" eq exec("command #3")) //conditionn" + ")n" + "n" + //split here "exec(n" + " "command #2" n" + ","exec("command #4") //conditionn" + ");"; List<String> matches = new ArrayList<String>(); Pattern pattern = Pattern.compile("execs*(.*)"); Matcher matcher = pattern.matcher(s); while (matcher.find()) { matches.add(matcher.group()); } System.out.println(matches); } 我期待输出为 [exec( "command #1","* * * * *" //cron string,"false" eq exec("command #3")) //condition ),exec( "command #2","exec("command #4") //condition );] 但得到 [exec("command #3")),exec("command #4")] 有谁能帮我理解我哪里出错了? 解决方法
默认情况下,点字符.与换行符不匹配.在这种情况下,“exec”模式只有在同一行上出现时才匹配.
您可以使用Pattern.DOTALL来允许在换行符上进行匹配: Pattern.compile("execs*(.*)",Pattern.DOTALL); 或者,可以指定(?s),它是等效的: Pattern.compile("(?s)execs*(.*)"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |