java正則匹配HTML中a標(biāo)簽里的中文字符示例
本文實例講述了java正則匹配HTML中a標(biāo)簽里的中文字符。分享給大家供大家參考,具體如下:
今天群里一位朋友問到了一個正則表達(dá)式的問題,有如下內(nèi)容:
<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>標(biāo)簽中的文字</a>
現(xiàn)在要匹配出內(nèi)容包含中文但標(biāo)簽的屬性中不包含comment的<a>標(biāo)簽中的漢字。
解決思路如下:
1、首先匹配出不包括comment的<a>標(biāo)簽;
2、在匹配結(jié)果中進(jìn)行二次匹配出中文;
代碼如下:
package com.mmq.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @use 匹配HTML的<a>標(biāo)簽中的中文字符
* @ProjectName stuff
* @Author mumaoqiang
* @FullName com.mmq.regex.MatchChineseCharacters.java
* @JDK 1.6.0
* @Version 1.0
*/
public class MatchChineseCharacters {
/**
* 根據(jù)輸入的內(nèi)容,匹配出包含中文但不包含comment的<a>標(biāo)簽中的中文字符
* @param source 要匹配的內(nèi)容
* @return <a>標(biāo)簽中的中文字符
*/
public static String matchChineseCharacters(String source) {
//匹配出包含中文但不包含comment的<a>標(biāo)簽
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);
//對結(jié)果進(jìn)行二次正則,匹配出中文字符
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>標(biāo)簽中的文字</a>");
System.out.println(result);
}
}
輸出結(jié)果如下:
<a guhll,,l>a1特123你好123嗎? <a>標(biāo)簽中的文字 特你好嗎標(biāo)簽中的文字
這里做一下解釋:
String reg = "<a((?!comment).)*?>([^<>]*?[\\u4e00-\\u9fa5]+[^<>]*?)+(?=</a>)";
這個匹配內(nèi)容包含中文但標(biāo)簽的屬性中不包含comment的<a>標(biāo)簽的正則中,不能使用向后查找?<=,因為向后查找只能是固定長度的內(nèi)容,這里<a>標(biāo)簽中屬性不確定,所以不能使用;[\\u4e00-\\u9fa5]+匹配中文字符串;而(?=</a>)使用向前查找?=,在結(jié)果中不會包含結(jié)束標(biāo)簽</a>。
這個問題就這樣得到解決了。如果說要匹配指定標(biāo)簽中的指定內(nèi)容,那么也是很容易改進(jìn)的了。若有更好的正則,還請留言相互學(xué)習(xí)。
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
mac下idea啟動web項目報錯java.net.SocketException:socket closed
本文主要介紹了作者在項目啟動時遇到的一個問題——無法打開調(diào)試端口,經(jīng)過一系列排查和嘗試,最終發(fā)現(xiàn)是由于權(quán)限問題導(dǎo)致的,作者還分享了如何修改文件權(quán)限的方法,并提醒大家不要隨意kill掉占用端口的進(jìn)程2024-12-12
SpringCloud微服務(wù)熔斷器Hystrix使用詳解
這篇文章主要介紹了Spring Cloud Hyxtrix的基本使用,它是Spring Cloud中集成的一個組件,在整個生態(tài)中主要為我們提供服務(wù)隔離,服務(wù)熔斷,服務(wù)降級功能,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
Java并發(fā)工具類之CountDownLatch詳解
這篇文章主要介紹了Java并發(fā)工具類之CountDownLatch詳解,CountDownLatch可以使一個獲多個線程等待其他線程各自執(zhí)行完畢后再執(zhí)行,CountDownLatch可以解決那些一個或者多個線程在執(zhí)行之前必須依賴于某些必要的前提業(yè)務(wù)先執(zhí)行的場景,需要的朋友可以參考下2023-12-12
一文掌握SpringSecurity?BCrypt密碼加密和解密
BCrypt就是一款加密工具,可以比較方便地實現(xiàn)數(shù)據(jù)的加密工作。也可以簡單理解為它內(nèi)部自己實現(xiàn)了隨機(jī)加鹽處理,這篇文章主要介紹了SpringSecurity?BCrypt密碼加密和解密,一文學(xué)會使用BCryptPasswordEncoder的方法,需要的朋友可以參考下2023-04-04
Java構(gòu)建JDBC應(yīng)用程序的實例操作
在本篇文章里小編給大家整理了一篇關(guān)于Java構(gòu)建JDBC應(yīng)用程序的實例操作,有興趣的朋友們可以學(xué)習(xí)參考下。2021-03-03
javaweb Servlet開發(fā)總結(jié)(一)
Servlet是sun公司提供的一門用于開發(fā)動態(tài)web資源的技術(shù)。這篇文章主要介紹了javaweb Servlet開發(fā)的第一篇,感興趣的小伙伴們可以參考一下2016-05-05

