Java 删除HTML标记的正则表达式不';不匹配

Java 删除HTML标记的正则表达式不';不匹配,java,regex,Java,Regex,我有一个字符串,如随机用户的[INFO]。,我想从这个字符串中删除html标记,如和 我试图用Java中的String.replaceAll方法实现这一点,但它不起作用 public static String removeHTMLTags(String original){ String str = original.replaceAll("^<.+>$", ""); return str; } publicstaticstringremovehtmltags(字

我有一个字符串,如随机用户的
  • [INFO]。
  • ,我想从这个字符串中删除html标记,如
  • 我试图用Java中的
    String.replaceAll
    方法实现这一点,但它不起作用

    public static String removeHTMLTags(String original){
        String str = original.replaceAll("^<.+>$", "");
        return str;
    }
    
    publicstaticstringremovehtmltags(字符串原始){
    字符串str=original.replaceAll(“^$”,“”);
    返回str;
    }
    
    您正在转换可能也包含换行符的HTML字符串。点与正则表达式中的新行字符不匹配。您需要将
    (?s)
    (DOTALL)标志与惰性量词一起使用,而不使用锚定:

    String str = original.replaceAll("(?s)<.+?>", "");
    
    String str=original.replaceAll(“(?s)”,”);
    

    尽管我必须提醒您使用正则表达式来解析/转换HTML,但它很容易出错。

    您正在转换的HTML字符串可能也包含换行符。点与正则表达式中的新行字符不匹配。您需要将
    (?s)
    (DOTALL)标志与惰性量词一起使用,而不使用锚定:

    String str = original.replaceAll("(?s)<.+?>", "");
    
    String str=original.replaceAll(“(?s)”,”);
    

    尽管我必须提醒您使用正则表达式来解析/转换HTML,但它可能容易出错。

    删除“^”和“$”,并使用带有dotall标志的不情愿的量词(因此点也与换行符匹配):

    publicstaticstringremovehtmltags(字符串原始){
    返回原件。replaceAll(“(?s)”,“”);
    }
    
    或者使用求反字符类(将匹配换行符)

    publicstaticstringremovehtmltags(字符串原始){
    返回原始的.replaceAll(“]+>”,“”);
    }
    
    删除“^”和“$”,并使用带有dotall标志的不情愿量词(因此点也与换行符匹配):

    publicstaticstringremovehtmltags(字符串原始){
    返回原件。replaceAll(“(?s)”,“”);
    }
    
    或者使用求反字符类(将匹配换行符)

    publicstaticstringremovehtmltags(字符串原始){
    返回原始的.replaceAll(“]+>”,“”);
    }
    
    您的正则表达式找不到匹配项,因为
    ^
    $
    锚定指定输入字符串中的第一个字符必须是

    但是,如果没有这些锚,您的正则表达式仍然无法实现您想要的功能,因为量词(如
    +
    )在默认情况下是贪婪的。
    因此,如果输入字符串是
    text1 text2
    ,则转换后的输出将是
    text1 text2
    ,因为正则表达式将匹配从第一个
    的所有内容

    因此,为了停止在第一个
    ,您应该使您的量词不贪婪:
    +?

    您的正则表达式没有找到匹配项,因为
    ^
    $
    锚定指定输入字符串中的第一个字符必须是
    ,最后一个字符必须是code>

    但是,如果没有这些锚,您的正则表达式仍然无法实现您想要的功能,因为量词(如
    +
    )在默认情况下是贪婪的。
    因此,如果输入字符串是
    text1 text2
    ,则转换后的输出将是
    text1 text2
    ,因为正则表达式将匹配从第一个
    的所有内容

    因此,为了在第一个
    处停止,您应该使您的量词非贪婪:
    +?

    字符串中的HTML标记在哪里?@Reddy Sorry,网站将解析HTML标记…现在我在每个标记之前添加了一个点。尝试排除“^”和$,因为您不想只捕获整行是HTML标记的情况。字符串中的HTML标记在哪里?@Reddy抱歉,该网站将解析HTML标记…现在我在每个标记之前添加了一个点。尝试排除“^”和“$”,因为您不想只捕获整行是HTML标记的情况。我可以知道什么是“s”吗?
    (?)s
    打开“dotall”标志,该标志将更改点
    ,以同时匹配换行符(没有标志,点
    匹配除换行符以外的所有字符)我可以知道s的意思吗?
    (?s)
    打开“dotall”标志,它将点
    更改为也匹配换行符(没有标志,点
    匹配除换行符以外的所有字符)
    public static String removeHTMLTags(String original){
        return original.replaceAll("<[^>]+>", "");
    }