JavaRush /จาวาบล็อก /Random-TH /ลิงก์ย้อนกลับใน Java Regular Expression
eGarmin
ระดับ

ลิงก์ย้อนกลับใน Java Regular Expression

เผยแพร่ในกลุ่ม
การอ้างอิงย้อนกลับ ในนิพจน์ทั่วไปของ Java เป็นคุณลักษณะที่มีประโยชน์มากซึ่งสนับสนุนโดยกลไก Java เพื่อทำความเข้าใจว่าลิงก์ย้อนกลับคืออะไร คุณต้องเรียนรู้ที่จะเข้าใจว่ากลุ่ม คือ อะไร ก่อน กลุ่มในนิพจน์ทั่วไปถือว่าอักขระหลายตัวเป็นหน่วยเดียว กลุ่มถูกสร้างขึ้นโดยการวางอักขระในวงเล็บ – “()” วงเล็บหนึ่งคู่คือหนึ่งกลุ่ม ลิงก์ย้อนกลับนั้นสะดวกเพราะเราสามารถทำซ้ำรูปแบบการค้นหาโดยไม่ต้องคัดลอกโดยตรง เราเพียงแค่ต้องอ้างถึงกลุ่มที่กำหนดไว้ก่อนหน้านี้โดยใช้โครงสร้างเช่น \Nโดยที่ Nคือหมายเลขกลุ่ม 2 ตัวอย่างต่อไปนี้ให้ความรู้สึกถึงความสะดวกของลิงก์ย้อนกลับ
ตัวอย่างที่ 1: การค้นหารูปแบบการทำซ้ำ
การสร้างแบบฟอร์ม (\d\d\d)\1 ตรงกับบรรทัด 123123 แต่ไม่ใช่บรรทัด 123456 String str = "ля123123ля"; Pattern p = Pattern.compile("(\\d\\d\\d)\\1"); Matcher m = p.matcher(str); System.out.println(m.groupCount()); while (m.find()) { String word = m.group(); System.out.println(word + " " + m.start() + " " + m.end()); } ผลลัพธ์: 1 123123 2 8 หมายเหตุจากนักแปล! ในฐานะนักแปล ฉันต้องการใช้เสรีภาพเล็กน้อยและแทรกความคิดเห็นจากตัวฉันเองเพราะว่า ฉันแค่เรียนรู้เกี่ยวกับนิพจน์ทั่วไปด้วยตัวเองและหวังว่าพวกเขาจะแก้ไขฉันด้วยคำหยาบคาย :) หากสิ่งที่ฉันเขียนด้านล่างมีข้อผิดพลาด: 1) วิธี groupCount () ส่ง กลับจำนวนกลุ่มที่ระบุในรูปแบบ ดังนั้นแม้แต่ หากสตริงอินพุตคือ "la123" 456 la" ซึ่งไม่พอดีกับเทมเพลต หมายเลข 1 จะยังคงแสดงบนหน้าจอ 2) วิธี find () ค้นหากลุ่มถัดไป แต่ส่งคืนเฉพาะค่าบูลีน : true – found, false – not found 3) group() Method ส่งกลับสตริงย่อยสุดท้ายที่พบจากรูปแบบ ในกรณีนี้ 123123 4) เมธอด start() ส่งกลับตำแหน่งของสตริงย่อยที่พบในสตริงต้นทาง (แน่นอนว่าการกำหนดหมายเลขเริ่มต้นจากศูนย์) 5) เมธอด end() ส่งกลับตำแหน่งในสตริงต้นทางหลังจากพบทันที สตริงย่อย ดังนั้นค่านี้ไม่ได้ชี้ไปที่อักขระตัวสุดท้ายของสตริงย่อยที่พบในสตริงต้นทาง แต่จะชี้ไปที่อักขระตัวถัดไปหลังจากนั้น
ตัวอย่างที่ 2: การค้นหาคำที่ซ้ำกัน
String pattern = "\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b"; Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); String phrase = "unique is not duplicate but unique, Duplicate is duplicate."; Matcher m = p.matcher(phrase); while (m.find()) { String val = m.group(); System.out.println("Найденная последовательность символов: \"" + val + "\""); System.out.println("Слово-дубликат: " + m.group(1) + "\n"); } สรุป: Найденная последовательность символов: "unique is not duplicate but unique" Слово-дубликат: unique Найденная последовательность символов: "Duplicate is duplicate" Слово-дубликат: Duplicate โปรดทราบว่าวิธีการค้นหาคำที่ซ้ำกัน (โดยใช้นิพจน์ทั่วไป) วิธีนี้ไม่เหมาะสมที่สุด ตัวอย่างเช่น ในตัวอย่างข้างต้น คำแรก "ซ้ำ" จะถูกข้ามไป
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION