有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中使用regex/pattern删除标记

我有一个字符串“<li>test<ul></ul><li>test<ul><li>model<ul></ul><li>src<ul><li>org<ul>"”,我想从字符串中删除模式“<li>test<ul></ul>”。 所以我想要的输出是“<li>test<ul><li>src<ul><li>org<ul>

我试过这样做

public class Test {
    public static void main(String[] args) {
        String str = "<li>test<ul></ul><li>test<ul><li>model<ul></ul><li>src<ul><li>org<ul>";
        str = str.replaceAll("(?s)<li>.*?<ul></ul>", "");
        System.out.println(str);
    }

}

但它不起作用,我得到的输出是“<li>src<ul><li>org<ul>


共 (2) 个答案

  1. # 1 楼答案

    我认为您不太了解正则表达式是如何工作的

    看看这里:http://regexr.com/3ebpv

    基本上,您的正则表达式在两个部分上是匹配的:

    <li>test<ul></ul><li>test<ul><li><model><ul></ul>.

    因此只剩下:<li>src<ul><li>org<ul>

    如果您特别想删除模式<li>test<ul></ul>, 那你为什么不用它来代替呢?这不是正则表达式,而是要查找和替换的精确字符串。对于一个简单的问题,你想得太多了

    这就足够了,不是吗

    public class Test {
        public static void main(String[] args) {
            String str = "<li>test<ul></ul><li>test<ul><li>model<ul></ul><li>src<ul><li>org<ul>";
            str = str.replaceAll("<li>src<ul><li>org<ul>", "");
            System.out.println(str);
        }
    
    }
    
  2. # 2 楼答案

    尝试此操作并替换为“”

    public static void main(String[] args) {
        String str = "<li>test<ul></ul><li>test<ul><li>model<ul></ul><li>src<ul><li>org<ul>";
        str = str.replaceAll("<li>([^<]*)<ul><\\/ul>", "");
        System.out.println(str);
    }
    

    编辑:

    以下是所要求的解释: reg引擎将开始匹配<li><ul></ul>之间的任何内容[^<]*将确保没有“<;”在…之间登录。。。这使得它有点懒惰,这也可以通过使用。*?来实现