Java正则表达式抽取网页script标签之间的内容

tsang1990 2017-07-14 11:04:09

String regex = "<[\\s]*?script type=\"text/tp[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
String htmlURL = "http://mshupeidian.bjx.com.cn/mnews/20170711/836347.shtml";
// String html = "<script type=\"text/tp1\" id=\"tp1\"><p><strong>95、发电源设点功率按什么原则计算?</strong></p><p>答:电源设点功率是根据ACE的大小按不同原则计算。ACE按其大小分为死区、正常分配区、允许控制区及紧急支援区。对不同的区域有不同的分配策略。</p></script>";
String html = HtmlUtils.getUserHtmlContent(htmlURL);//返回的网页源码
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(html);
while(matcher.find()){
System.out.println(matcher.group(0));
}

如题,想利用正则表达式提取网页<script type="text/tp1" id="tp1"></script>间的内容,采用如上regex表达式时发现返回的结果:
<script type="text/tp1" id="tp1">
<p><strong>95、发电源设点功率按什么原则计算?</script>
<script type="text/tp2" id="tp2">
<p><strong>107、什么是能量管理系统(EMS)?其主要功能是什么?</script>
<script type="text/tp3" id="tp3">
<p><strong>122、电力系统电压调整的常用方法有几种?</script>
<script type="text/tp4" id="tp4">
<p><strong>137、电力变压器停、送电操作,应注意哪些事项?</script>

问题即遇到源码含半边 /> 就停止匹配了,不能抽取完整结果,但同样的方法将上述的匹配内容换为注释的内容时有能准确抽取,尝试直接在网页源码进行转义双引号(即
String html = HtmlUtils.getUserHtmlContent(htmlURL).replaceAll("\"","\"");
)但依然无法抽取
!请问如何才能抽取完整结果,万谢!!
...全文
653 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsang1990 2017-07-14
  • 打赏
  • 举报
回复
将表达式
String regex = "<[\\s]*?script type=\"text/tp[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
改为
String regex = "<script type=\"text/tp\\d\"\\s*id=\"tp\\d\">(\\s*\\S*.*)"
也就是将后半个标签</script>去除匹配就解决了问题,匹配出来的部分结果
<p><strong>导体屏蔽层(也称内屏蔽层、内半导电层)</script>
可见到有</script>穿插在其中,但后面的内容依然可以准确抽取出来,新手不才,希望哪位大神解答一下其中的原因,万谢!!

51,399

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧