บทความนี้อธิบายถึงอักขระจีนในแท็กการแข่งขันปกติใน Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
วันนี้เพื่อนในกลุ่มถามคำถามเกี่ยวกับการแสดงออกปกติซึ่งมีเนื้อหาต่อไปนี้:
<a href = 'www.baidu.comds = id32434#comment'rewr> special432 </a> 453543 <a guhll ,, l> a1special123 ใช่ไหม? </a> <a href = id = 32434#comment'ewrer> พิเศษ 2 </a> <a> ข้อความ 2 </a> <a> ข้อความ </a>
ตอนนี้คุณต้องการจับคู่อักขระจีนในแท็ก <a> ที่มีเนื้อหามีภาษาจีน แต่มีคุณสมบัติที่ไม่มีความคิดเห็น
การแก้ปัญหามีดังนี้:
1. จับคู่แท็ก <a> ที่ไม่รวมความคิดเห็น;
2. สร้างการจับคู่กำลังสองในผลการจับคู่เพื่อผลิตภาษาจีน
รหัสมีดังนี้:
แพ็คเกจ com.mmq.regex; นำเข้า java.util.regex.matcher; นำเข้า java.util.regex.pattern;/** * @use จับคู่ตัวละครจีนใน <a> แท็กของ html * @projectname * @author mumaoqiang 1.6.0* @Version 1.0*/คลาสสาธารณะ MatchChinesecharacters {/*** ขึ้นอยู่กับอินพุตจับคู่อักขระจีนในแท็ก <a> ที่มีภาษาจีน แต่ไม่มีความคิดเห็น* @param แหล่งข้อมูลแหล่งที่มาเพื่อจับคู่อักขระจีน <a> แท็ก "<a ((?! ความคิดเห็น).)*?> ([^<>]*? [// u4e00-// u9fa5]+[^<>]*?)+(? = </a>)"; รูปแบบรูปแบบ = pattern.compile (reg); matcher matcher = pattern.matcher (แหล่งที่มา); อักขระ StringBuilder = new StringBuilder (); ในขณะที่ (matcher.find ()) {string result = matcher.group (); System.out.println (ผลลัพธ์); // ทำให้ผลลัพธ์เป็นสมการสมการกำลังสองและจับคู่สตริงอักขระจีน reg1 = "[// u4e00-// u9fa5]+"; รูปแบบ p1 = pattern.compile (reg1); Matcher M1 = P1.Matcher (ผลลัพธ์); ในขณะที่ (m1.find ()) {character.append (m1.group ()); } //system.out.println (character.toString ()); } return character.toString (); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สตริงผลลัพธ์ = matchChinesecharacters ("<a href = 'www.baidu.comds = id32434#comment'rewr> special432 </a> 453543 <a guhll, l> a1special123hello href = id = 32434#comment'ewrer> special2 </a> <a> text2 </a> <a> ข้อความ </a> "); System.out.println (ผลลัพธ์); -ผลลัพธ์ผลลัพธ์มีดังนี้:
<a guhll ,, l> a1special123 สวัสดี 123? <a> ข้อความในแท็กสบายดีไหม
นี่คือคำอธิบาย:
String reg = "<a ((?! ความคิดเห็น).)*?> ([^<>]*? [// u4e00-// u9fa5]+[^<>]*?)+(? = </a>)";
เนื้อหาที่ตรงกันนี้มีภาษาจีน แต่แอตทริบิวต์แท็กไม่มีความคิดเห็น การค้นหาย้อนหลัง? <= ไม่สามารถใช้งานได้เนื่องจากการค้นหาย้อนหลังสามารถเป็นเนื้อหาที่มีความยาวคงที่เท่านั้น คุณลักษณะในแท็กนั้นไม่แน่นอนดังนั้นจึงไม่สามารถใช้งานได้ [// U4E00-// U9FA5]+ ตรงกับสตริงจีน ในขณะที่ (? = </a>) ใช้การค้นหาไปข้างหน้า? = และแท็กสุดท้ายจะไม่รวมอยู่ในผลลัพธ์
ปัญหานี้ได้รับการแก้ไข หากคุณต้องการจับคู่เนื้อหาที่ระบุในแท็กที่ระบุมันก็ง่ายต่อการปรับปรุง หากมีกฎที่ดีกว่าโปรดฝากข้อความเพื่อเรียนรู้จากกันและกัน
PS: นี่คือเครื่องมือการแสดงออกปกติที่สะดวกมากสำหรับการอ้างอิงของคุณ:
JavaScript Expression Expression Online Testing Tool:
http://tools.vevb.com/regex/javascript
เครื่องมือสร้างออนไลน์การแสดงออกปกติ:
http://tools.vevb.com/regex/create_reg
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน