求可替换HTML标签提取文本的正则表达式解决方案
解决HTML标签提取文本的正则问题
嘿,我来帮你搞定这个问题!你之前的正则表达式之所以没达到效果,是因为用错了写法——字符类(方括号[])只会匹配单个字符,而不是完整的HTML标签块。
为什么你的正则失效了?
你用的[<span*\b>]是一个字符类,它会逐个匹配方括号里的字符:&、l、t、;、s、p、a、n、*、\b(这里是退格字符,不是你想的单词边界)、>。所以它只是把这些单个字符从字符串里删掉,剩下的字符比如t、y、l、e不在字符类里,就保留了下来,这才出现了tyle="fot-ize:11t;"这种奇怪的输出。
正确的正则表达式
根据你的字符串是转义后的HTML(用<代替<,>代替>),我们需要匹配完整的转义标签块:
String x = '<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri, sans-serif;"><strong><font color="#000000">Some normal text here...</font></strong></span></span></span>'; String y = x.replaceAll("<\\/?[^&]+?>", ""); System.debug(y);
正则解释:
<:匹配转义的左尖括号\\/?:匹配可选的/(用于匹配结束标签,比如</font>)[^&]+?:非贪婪匹配任意非&的字符,确保只匹配到当前标签的>就停止,不会跨标签匹配>:匹配转义的右尖括号
执行这段代码后,输出就是你想要的:Some normal text here...
如果是原始HTML(未转义)
如果你的字符串是直接包含<和>的原始HTML,把正则改成下面这样即可:
String y = x.replaceAll("<\\/?[^>]+>", "");
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

