Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ประเภทของตัวระบุใน Java regex


หากคุณต้องการระบุจำนวนครั้งในขณะที่สร้างนิพจน์ทั่วไป คุณสามารถใช้ตัวระบุได้ Java รองรับ quantifiers สามประเภท ได้แก่:greedy quantifiers, quantifiers ที่ไม่เต็มใจ และ quantifiers ที่มีความเป็นเจ้าของ

ปริมาณที่โลภ - ปริมาณโลภคือปริมาณเริ่มต้น ปริมาณที่โลภจับคู่ให้มากที่สุดจากสตริงอินพุต (การจับคู่ที่ยาวที่สุดเท่าที่จะเป็นไปได้) หากไม่จับคู่จะออกจากอักขระตัวสุดท้ายและจับคู่อีกครั้ง

ตัวอย่าง

<ก่อน> นำเข้า java.util.Scanner; นำเข้า java.util.regex.Matcher; นำเข้า java.util.regex.Pattern; การทดสอบคลาสสาธารณะ { โมฆะสาธารณะหลัก (สตริง [] args) { Scanner sc =สแกนเนอร์ใหม่ (ระบบ .ใน); System.out.println("ป้อนข้อความ:"); อินพุตสตริง =sc.nextLine(); สตริง regex ="[0-9]+"; //การสร้างวัตถุรูปแบบ Pattern pattern =Pattern.compile(regex); //จับคู่รูปแบบที่คอมไพล์แล้วใน String Matcher matcher =pattern.matcher(input); System.out.println(""ข้อความที่ตรงกัน:); ในขณะที่ (matcher.find ()) { System.out.println (matcher.group ()); } }}

ผลลัพธ์

ป้อนข้อความที่ป้อน:ข้อความที่ตรงกัน:45545

ตัวระบุปริมาณที่ไม่เต็มใจ - ปริมาณที่ไม่โลภ/ไม่เต็มใจจะจับคู่ให้น้อยที่สุดเท่าที่จะทำได้ ในขั้นต้น ปริมาณที่ไม่โลภจะจับคู่กับอักขระตัวแรกหากไม่มีการจับคู่ จะเพิ่มอักขระอื่นจากสตริงอินพุตและพยายามจับคู่ หากคุณวาง “?” หลังจากปริมาณที่โลภจะกลายเป็นปริมาณที่ไม่เต็มใจหรือไม่โลภ

ตัวอย่าง

<ก่อน> นำเข้า java.util.Scanner; นำเข้า java.util.regex.Matcher; นำเข้า java.util.regex.Pattern; การทดสอบคลาสสาธารณะ { โมฆะสาธารณะหลัก (สตริง [] args) { Scanner sc =สแกนเนอร์ใหม่ (ระบบ .ใน); System.out.println("ป้อนข้อความ:"); อินพุตสตริง =sc.nextLine(); สตริง regex ="[0-9]+?"; //การสร้างวัตถุรูปแบบ Pattern pattern =Pattern.compile(regex); //จับคู่รูปแบบที่คอมไพล์แล้วใน String Matcher matcher =pattern.matcher(input); ในขณะที่ (matcher.find ()) { System.out.println (matcher.group ()); } }}

ผลลัพธ์

ป้อนข้อความอินพุต:1234567812345678

ตัวระบุปริมาณ - ปริมาณแสดงความเป็นเจ้าของจะคล้ายกับปริมาณที่โลภ ความแตกต่างเพียงอย่างเดียวคือพยายามจับคู่อักขระให้มากที่สุดเท่าที่จะทำได้ในตอนแรก และหากการจับคู่ไม่เกิดขึ้นซึ่งแตกต่างจากปริมาณที่โลภ จะไม่ย้อนกลับ

หากคุณใส่เครื่องหมาย "+" หลังตัวระบุปริมาณมาก มันจะกลายเป็นตัวระบุปริมาณ ต่อไปนี้คือรายการของปริมาณความเป็นเจ้าของ:

ตัวอย่าง

<ก่อน> นำเข้า java.util.Scanner; นำเข้า java.util.regex.Matcher; นำเข้า java.util.regex.Pattern; การทดสอบคลาสสาธารณะ { โมฆะสาธารณะหลัก (สตริง [] args) { Scanner sc =สแกนเนอร์ใหม่ (ระบบ .ใน); System.out.println("ป้อนข้อความ:"); อินพุตสตริง =sc.nextLine(); สตริง regex ="[0-9]++"; //การสร้างวัตถุรูปแบบ Pattern pattern =Pattern.compile(regex); //จับคู่รูปแบบที่คอมไพล์แล้วใน String Matcher matcher =pattern.matcher(input); ในขณะที่ (matcher.find ()) { System.out.print (matcher.group ()); System.out.println(); } }}

ผลลัพธ์

ป้อนข้อความที่ป้อน:4567845678