如何在java中使用正则表达式/模式删除标签

时间:2016-10-01 08:21:23

标签: java regex

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

我试过以下方式。

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);
    }

}

但它没有奏效,我的输出为&#34; <li>src<ul><li>org<ul>&#34;

2 个答案:

答案 0 :(得分:1)

我不认为你非常了解RegEx的运作方式。

看看这里: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);
    }

}

答案 1 :(得分:1)

尝试此操作并替换为&#34;&#34;

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>之间的任何内容。 [^<]*将确保没有&#34;&lt;&#34;在...之间签名,这使得它变得懒惰,也可以通过使用。*?。

来完成