บทความนี้อธิบายถึงฟังก์ชั่นและการใช้งานการดูรอบทิศทางและการย้อนกลับเป็นประจำใน Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
รอบมุมมอง
1. โดยรอบแนวคิด
มองไปรอบ ๆ หรือที่เรียกว่าการยืนยันความกว้างเป็นศูนย์การยืนยันอย่างย่อ
มุมมองรอบทิศทางเน้นตำแหน่ง (ด้านหน้าหรือด้านหลัง) และการแสดงออกของมุมมองรอบทิศทางจะต้องจับคู่ให้ประสบความสำเร็จ
การดูรอบทิศทางถือเป็นเงื่อนไขการตัดสินเพิ่มเติมสำหรับการเพิ่มเสมือนกับตำแหน่งและไม่ได้ใช้อักขระที่ตรงกันปกติ
2. มองไปรอบ ๆ การแสดงออกพื้นฐาน
(? = นิพจน์) คำสั่งเป็นบวกและการแสดงออกสามารถจับคู่ที่ด้านขวาของตำแหน่ง
(?! การแสดงออก) การปฏิเสธลำดับของการดูโดยรอบหมายความว่าด้านขวาของตำแหน่งไม่สามารถจับคู่การแสดงออกได้
(? <= นิพจน์) ลำดับย้อนกลับมองไปรอบ ๆ โดยระบุว่าด้านซ้ายของตำแหน่งสามารถจับคู่นิพจน์ได้
(? <! Expression) ลำดับย้อนกลับลบมุมมองโดยรอบแสดงให้เห็นว่าด้านซ้ายของตำแหน่งไม่สามารถจับคู่การแสดงออกได้
หมายเหตุ: ด้านขวาของคำสั่ง (=) จับคู่และมุมมองรอบทิศทางย้อนกลับมีมากกว่า <มากกว่ามุมมองรอบทิศทางตามลำดับ
JavaScript รองรับการรับชมรอบทิศทางตามลำดับเท่านั้น แต่ไม่รองรับการดูรอบทิศทางย้อนกลับ
แม้ว่าทั้งมุมมองรอบทิศทางตามลำดับและมุมมองรอบทิศทางย้อนกลับได้รับการสนับสนุนใน Java แต่มุมมองรอบทิศทางย้อนกลับจะรองรับการแสดงออกที่มีการกำหนดความยาวเท่านั้น ในมุมมองรอบทิศทางแบบย้อนกลับมีการรองรับปริมาณเท่านั้น? และไม่รองรับปริมาณอื่น ๆ ที่มีความยาวไม่แน่นอน
3. ใช้ตัวอย่าง
3.1. การยืนยันลำดับและมองไปรอบ ๆ (? = นิพจน์)
3.1.1. จับคู่ชื่อไฟล์โดยไม่มีคำต่อท้ายกับส่วนท้ายของคำต่อท้าย ".txt"
【.+(? =/. txt) 】
ข้อความ:
txtfile.txt
exefile.exe
inifile.ini
ผลการจับคู่: txtfile
3.1.2. จับคู่รหัสผ่าน (ต้องมีตัวอักษร (กรณีที่ไม่รู้สึก), ตัวเลข, 6-16 หลัก)
【^(? =.*? [a-za-z]) (? =.*? [0-9]) [a-za-z0-9] {6,16} $ 】】
(? =.*? [a-za-z]) กำหนดตัวอักษรอย่างน้อยหนึ่งตัวในอักขระต่อไปนี้ใช้ (? =.*? [0-9]) เพื่อกำหนดหมายเลขอย่างน้อยหนึ่งตัวในอักขระต่อไปนี้
3.2. ลำดับการปฏิเสธมุมมองรอบทิศทาง (?! การแสดงออก)
3.2.1. จับคู่แท็กอื่นนอกเหนือจาก <a> </a>
【 <(?!/? a/b) [^<]+?> 】
ข้อความ: <a> <a1> </a> Zxiaofan <div> com </d> iv> cc
ผลการจับคู่:
<A1>
<div>
</d>
3.2.2. จับคู่ชื่อไฟล์กับคำต่อท้ายที่ไม่ใช่ ".txt" ในตอนท้ายของคำต่อท้าย
【.+ (?!/. txt) 】ข้อผิดพลาดการแสดงออกเพราะ.+ ไม่มีตำแหน่งที่ระบุและเป็นการจับคู่โลภ (So.+ สามารถจับคู่ txtfile.txt ได้โดยตรง)
【 (.+) (?!/. txt)/. [^.]+$ 】
ข้อความ:
txtfile.txt
exefile.exe
inifile.ini
ผลการจับคู่:
exefile.exe
inifile.ini
3.3. การยืนยันคำสั่งซื้อย้อนกลับรอบ ๆ (? <= นิพจน์)
3.3.1. จับคู่เนื้อหาระหว่างแท็กที่ระบุ
【 (? <= <= div>) [^<]+(? = </div>) 】
ข้อความ: <div> zxiaofan.com </div>
ผลการจับคู่: zxiaofan.com
3.3.2. รับค่าของพารามิเตอร์ที่ระบุ
【 (? <= name =).+】
ข้อความ:
ชื่อ = zxiaofan
อายุ = 20
ระดับ = 6
ผลการจับคู่: zxiaofan
3.4. ย้อนกลับลำดับการปฏิเสธมุมมองรอบทิศทาง (? <! การแสดงออก)
3.4.1. รับค่าของพารามิเตอร์ที่ไม่ได้ระบุ
【^[^=#]+= (? <! name =).+$ 】
ข้อความ:
ชื่อ = zxiaofan
อายุ = 20
ระดับ = 6
#เพศ = 1
ผลการจับคู่:
อายุ = 20
ระดับ = 6
4. ตัวอย่างที่ครอบคลุม
4.1. ต้องมีตัวอักษรตัวเลขและอักขระพิเศษ
【^(? =.*? [a-za-z]) (? =.*?/d) (?! [a-za-z/d]+$).+$ 】】
คำอธิบาย: ^(? =.*? [a-za-z]) ต้องมีตัวอักษร; (? =.*?/d) ขีด จำกัด ต้องมีตัวเลข; (?! [A-ZA-Z/D]+$) ขีด จำกัด ไม่สามารถเป็นตัวเลขและตัวอักษรทั้งหมดได้
4.2. จับคู่ชื่อโดเมนหลัก (ตรงกับชื่อโดเมนระดับบนสุด)
【 (? <= (? :: /// w {0,50}/.)?) (?:/w {0,50}/.) (?: com/.cn | net/.cn | org/.cn | com | net | org | cn | biz
ข้อความ:
vip.zxiaofan.com.cn
http://zxiaofan.com/123
www.zxiaofan.org.cn
ผลการจับคู่:
zxiaofan.com.cn
zxiaofan.com
zxiaofan.org.cn
หมายเหตุ: [?:] อย่าจับภาพข้อความการจับคู่ไปยังกลุ่มที่มีชื่อโดยอัตโนมัติและไม่ได้กำหนดกลุ่มให้กับกลุ่มนี้ (จะไม่ส่งผลกระทบต่อผลลัพธ์หลังจากการลบ)
ชื่อโดเมนพิเศษ: Wanwang www.net.cn
4.3. จับคู่หมายเลขโทรศัพท์มือถือติดต่อกัน 5 หมายเลข
【 1 [34578]/d {3} (/d) (?!/1 {1}) (/d)/2 {4} 】
ข้อความ:
18328501111
18328511111111
183285551111
183281111111111
ผลการจับคู่:
18328511111111
note1:/1 ตรงกับชุดแรกของเนื้อหา
note2: (? !/1 {1}) ตัวกรอง 6 หมายเลขติดต่อกัน
การย้อนกลับ
1. แนวคิด backreference
กลุ่มจับภาพ: แบ่งออกเป็นหลายกลุ่มตาม () การแสดงออกของ () subexpression; แต่ละคู่ของ () ปรากฏเป็นกลุ่มจับภาพ; เครื่องยนต์จะหมายเลขกลุ่มจับภาพและกฎการกำหนดหมายเลขคือวงเล็บซ้าย (ลำดับการเกิดขึ้นจากซ้ายไปขวาเริ่มจาก 1
การตั้งชื่อกลุ่มจับภาพ:
(? <name> exp) จับคู่ exp และจับข้อความลงในกลุ่มชื่อชื่อซึ่งสามารถเขียนเป็น (? 'name'exp);
(?: exp) จับคู่ exp ไม่จับข้อความการจับคู่ไปยังกลุ่มที่มีชื่อโดยอัตโนมัติและไม่ได้กำหนดหมายเลขกลุ่มให้กับกลุ่มนี้
Backreference:
/1 หมายถึงกลุ่มแรก (ABC); /2 หมายถึงกลุ่มที่สอง
/K <ord>: หมายถึงกลุ่มที่มีชื่อที่ระบุ
2. ใช้ตัวอย่าง
2.1. จับคู่ชื่อไฟล์ด้วยจุดเริ่มต้นและจุดสิ้นสุดเดียวกัน
【 ([AZ] {3}) [AZ]+/./1 {1} 】
ข้อความ:
txtfile.txt
exefile.txt
fileini.ini
ผลการจับคู่:
txtfile.txt
หมายเหตุ: ([AZ] {3}) เป็นกลุ่มแรกและ /1 {1} หมายถึงการอ้างถึงกลุ่มแรกหนึ่งครั้ง (ไม่สามารถเขียนเป็น /1 {3} ที่นี่)
PS: นี่คือเครื่องมือการแสดงออกปกติที่สะดวกมากสำหรับการอ้างอิงของคุณ:
JavaScript Expression Expression Online Testing Tool:
http://tools.vevb.com/regex/javascript
เครื่องมือสร้างออนไลน์การแสดงออกปกติ:
http://tools.vevb.com/regex/create_reg
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "ทักษะการแสดงออกปกติของ Java", "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "Java Operation Dom Skills", "Java File
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน