这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 java 正则匹配 html 中 a 标签里的中文字符, 涉及 java 中文正则及 HTML 元素操作技巧, 具有一定参考借鉴价值, 需要的朋友可以参考下
本文实例讲述了 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 的 < a > 标签中的汉字
解决思路如下:
1 首先匹配出不包括 comment 的 < a > 标签;
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 的 < a > 标签的正则中, 不能使用向后查找?<=, 因为向后查找只能是固定长度的内容, 这里 < a > 标签中属性不确定, 所以不能使用;[\\u4e00-\\u9fa5]+ 匹配中文字符串; 而 (?=</a>) 使用向前查找?=, 在结果中不会包含结束标签</a>
这个问题就这样得到解决了如果说要匹配指定标签中的指定内容, 那么也是很容易改进的了若有更好的正则, 还请留言相互学习
希望本文所述对大家 java 程序设计有所帮助
来源: http://www.phperz.com/article/18/0214/358908.html