加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式中的贪婪匹配(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*(.*)");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读