我正在尝试搜索可以包含 html 和纯文本的 Java 字符串。如果 html 用单个刻度包裹,或者一个('<b>'text'<b>')
html 块用三个刻度包裹('''<html><head><title>Sample</title></head><body><div>text</div></body></html>''')
,我不需要从字符串中删除 html。如果 html 没有用单个或三个刻度包裹,那么我需要删除 html。
如果内容不混合,则以下内容可以正常工作。我想对其进行修改,以便如果
String value="non <b>ticked</b> content <u>here</u> and '<b>'mixed'</b>' content '<u>'here'</u>'
将其写入内存/返回为non ticked content here and '<b>'mixed'</b>' content '<u>'here'</u>'
.
我相信我需要更改正则表达式以仅将未勾选的(单个或三个)内容传递给我的 jsoup html2text 方法。关于如何更改正则表达式或逻辑以便仅将未勾选的内容传递给 html2text 方法的任何想法?如果我将整个字符串(带有勾选的内容)传递给 jsoup,它将删除所有不需要的 html。
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import org.jsoup.Jsoup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
public class HtmlSerializer extends StdSerializer<String> {
private static final Logger LOG = LoggerFactory.getLogger(HtmlSerializer.class);
private static final Pattern singlePattern = Pattern.compile("'.*'");
private static final Pattern blockPattern = Pattern.compile("'''.*'''");
protected HtmlSerializer() {
super(String.class);
}
@Override
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException,
JsonGenerationException {
if(StringUtils.isNotBlank(value)){
Matcher blockMatcher = blockPattern.matcher(value);
Matcher singleMatcher = singlePattern.matcher(value);
if(!blockMatcher.find() && !singleMatcher.find()){
jgen.writeString(html2text(value));
}else{
jgen.writeString(value);
}
}else{
jgen.writeString(value);
}
}
private static String html2text(String html) {
return Jsoup.parse(html).text();
}
}