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("<[^>]+>", "");
}