本文实例讲述了java正则匹配HTML中a标签里的中文字符。分享给大家供大家参考,具体如下:
今天群里一位朋友问到了一个正则表达式的问题,有如下内容:
<a href='www.baidu.comds=id32434#comment'rewr>特432</a> 453543 <a guhll,,l>a1特123你好123吗?</a> <a href=id=32434#comment'ewrer>特2</a> <a>标签中的文字</a>
现在要匹配出内容包含中文但标签的属性中不包含comment的3499910bf9dac5ae3c52d5ede7383485标签中的汉字。
解决思路如下:
1、首先匹配出不包括comment的3499910bf9dac5ae3c52d5ede7383485标签;
2、在匹配结果中进行二次匹配出中文;
代码如下:
package com.mmq.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @use 匹配HTML的<a>标签中的中文字符 * @ProjectName stuff * @Author mumaoqiang * @FullName com.mmq.regex.MatchChineseCharacters.java * @JDK 1.6.0 * @Version 1.0 */ public class MatchChineseCharacters { /** * 根据输入的内容,匹配出包含中文但不包含comment的<a>标签中的中文字符 * @param source 要匹配的内容 * @return <a>标签中的中文字符 */ public static String matchChineseCharacters(String source) { //匹配出包含中文但不包含comment的<a>标签 String reg = "<a((?!comment).)*?>([^<>]*?[\\u4e00-\\u9fa5]+[^<>]*?)+(?=</a>)"; Pattern pattern = Pattern.compile(reg); Matcher matcher = pattern.matcher(source); StringBuilder character = new StringBuilder(); while(matcher.find()){ String result = matcher.group(); System.out.println(result); //对结果进行二次正则,匹配出中文字符 String reg1 = "[\\u4e00-\\u9fa5]+"; Pattern p1 = Pattern.compile(reg1); Matcher m1 = p1.matcher(result); while(m1.find()){ character.append(m1.group()); } //System.out.println(character.toString()); } return character.toString(); } public static void main(String[] args) { String result = matchChineseCharacters("<a href='www.baidu.comds=id32434#comment'rewr>特432</a>453543<a guhll,,l>a1特123你好123吗?</a><a href=id=32434#comment'ewrer>特2</a><a>标签中的文字</a>"); System.out.println(result); } }
输出结果如下:
<a guhll,,l>a1特123你好123吗? <a>标签中的文字 特你好吗标签中的文字
这里做一下解释:
String reg = "<a((?!comment).)*?>([^<>]*?[\\u4e00-\\u9fa5]+[^<>]*?)+(?=</a>)";
这个匹配内容包含中文但标签的属性中不包含comment的3499910bf9dac5ae3c52d5ede7383485标签的正则中,不能使用向后查找?<=,因为向后查找只能是固定长度的内容,这里3499910bf9dac5ae3c52d5ede7383485标签中属性不确定,所以不能使用;[\\u4e00-\\u9fa5]+匹配中文字符串;而(?=5db79b134e9f6b82c0b36e0489ee08ed)使用向前查找?=,在结果中不会包含结束标签5db79b134e9f6b82c0b36e0489ee08ed。
这个问题就这样得到解决了。如果说要匹配指定标签中的指定内容,那么也是很容易改进的了。若有更好的正则,还请留言相互学习。
希望本文所述对大家java程序设计有所帮助。
更多java正则匹配HTML中a标签里的中文字符示例相关文章请关注PHP中文网!

通过OAuth2.0的access_token如何精细控制接口访问权限?在现代应用开发中,OAuth2.0...

深入剖析RuoYi框架的Bean依赖注入机制:无需显式实现类RuoYi框架是一个流行的Java前后端分离框架,其简洁的代码...

使用RedisTemplate进行批量查询时返回值为空的原因及解决方案在使用SpringData...

在Java中如何在同一个Map中使用不同类型的Key在Java编程中,我们经常会使用Map数据结构来存储键值对。然而,有�...

使用Java解密next-auth生成的JWTToken并获取信息在使用next-auth生成JWT...

Springboot测试时如何解决动态加载Agent警告问题在进行Springboot项目的测试时,你可能会遇到如下警告信息:WARNING:...

JSON序列化与JDK序列化在存储上的差异探讨在编程和数据存储领域,序列化是将对象转换为可存储或传输格式的�...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版
中文版,非常好用