บทช่วยสอน การแสดงออกปกติ Java ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ กลุ่มการบันทึก,ตัวอย่าง,ไวยากรณ์แสดงออกปกติ,วิธีการเรียน Matcher,วิธีการที่ดัชนี,ระเบียบวิธีวิจัย,วิธีการเปลี่ยน,วิธีการเริ่มต้นและสิ้นสุด,การแข่งขันและวิธีการ lookingAt,วิธีการ replaceFirst และ replaceAll,วิธีการ appendReplacement และ appendTail,วิธีการเรียน PatternSyntaxException,

การแสดงออกปกติ Java

แสดงออกปกติกำหนดสตริงรูปแบบ

การแสดงออกปกติสามารถใช้ในการค้นหาแก้ไขหรือข้อความในการประมวลผล

การแสดงออกปกติไม่ จำกัด ภาษาบางอย่าง แต่มีความแตกต่างที่ลึกซึ้งในแต่ละภาษา

นิพจน์ทั่วไปของ Java และ Perl เป็นคล้ายกันมากที่สุด

แพคเกจ java.util.regex รวมถึงต่อไปสามประเภท:

  • ประเภทรูปแบบ:

    รูปแบบวัตถุเป็นตัวแทนการแสดงออกของคอมไพเลอร์ปกติ ระดับแบบไม่เคยมีใครสร้างสาธารณะ การสร้างวัตถุรูปแบบที่คุณต้องเรียกวิธีการรวบรวมของสาธารณะคงที่ส่งกลับวัตถุรูปแบบ วิธีนี้ใช้เวลาการแสดงออกปกติเป็นอาร์กิวเมนต์แรกของ

  • ประเภท Matcher:

    วัตถุ Matcher คือความหมายของสายป้อนและการดำเนินงานที่ตรงกับของเครื่องยนต์ เช่น class แบบที่ไม่เคยมีใคร Matcher สร้างสาธารณะ คุณจะต้องเรียกวัตถุวิธีการรูปแบบการจับคู่ที่จะได้รับวัตถุ Matcher

  • PatternSyntaxException:

    PatternSyntaxException เป็นชั้นยกเว้นไม่ได้รับคำสั่งที่แสดงถึงข้อผิดพลาดของไวยากรณ์รูปแบบการแสดงออกปกติ


กลุ่มการบันทึก

กลุ่มการจับตัวละครหลายเมื่อมีวิธีการรักษาที่หน่วยเดียวผ่านตัวละครที่จัดกลุ่มในวงเล็บในการสร้าง

ยกตัวอย่างเช่นการแสดงออกปกติ (สุนัข) สร้างกลุ่มเดียวกลุ่มที่มี "D", "O" และ "G"

กลุ่มจับภาพโดยการคำนวณวงเล็บเปิดเลขจากซ้ายไปขวา ยกตัวอย่างเช่นในการแสดงออก ((A) (B (C))) มีสี่กลุ่มดังกล่าว:

  • ((A) (B (C)))
  • (A)
  • (B (C))
  • (C)

โดยการเรียกวิธีการจับคู่วัตถุ groupCount ที่จะเห็นการแสดงออกของแพ็คเก็ตหลายวิธี วิธี groupCount กลับ int เป็นตัวแทนของวัตถุที่จับคู่ในปัจจุบันมีกลุ่มจับหลาย

มีกลุ่มพิเศษ (กลุ่ม 0) ก็มักจะหมายถึงการแสดงออกทั้งหมด กลุ่มที่ไม่รวมอยู่ในค่าตอบแทน groupCount

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการหาสตริงของตัวเลขจากสตริงได้รับ:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    public static void main( String args[] ){

      // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);

      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

ตัวอย่างข้างต้นรวบรวมผลมีดังนี้

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

ไวยากรณ์แสดงออกปกติ

ตัวละคร

คำอธิบาย

\

ตัวละครต่อไปคือการทำเครื่องหมายเป็นตัวอักษรพิเศษ, ข้อความ, กลับอ้างอิงหรือฐานแปดหลบหนี ยกตัวอย่างเช่น "n" ตรงกับตัวอักษร "N" "\ n" ตรงกับตัวอักษรขึ้นบรรทัดใหม่ ลำดับ "\\" การแข่งขัน "\", "\ (" การแข่งขัน "(".

^

ตรงกับสายป้อนเริ่มต้น ถ้าคุณตั้งค่าตำแหน่งวัตถุจับคู่Multiline คุณสมบัตินิพจน์ทั่วไปและยัง^ "\ n" หรือ "\ r" หลังจากที่

$

ตรงปลายใส่ของตำแหน่งสตริงหากวัตถุนิพจน์ทั่วไปของโรงแรม Multiline,$ ยังตรงกับ "\ n" หรือ "\ r" ตำแหน่งก่อน

* * * *

ศูนย์หรือตรงกับครั้งก่อนหน้านี้ตัวละครย่อยหรือการแสดงออก ยกตัวอย่างเช่น ZO * ตรงกับ "Z" และ "สวนสัตว์" * เทียบเท่า {0}

+

หนึ่งครั้งหรือมากกว่าตรงกับก่อนหน้านี้ตัวละครย่อยหรือการแสดงออก ยกตัวอย่างเช่น "ZO +" และ "โซ" และ "สวน" การแข่งขัน แต่ "Z" ไม่ตรงกับ + เทียบเท่ากับ {1}

?

ศูนย์หรือหนึ่งตรงกับก่อนหน้านี้ตัวละครย่อยหรือการแสดงออก ยกตัวอย่างเช่น "ทำ (ES)?" ตรงกับ "ทำ" หรือ "ไม่" ใน "ทำ" ? เทียบเท่ากับ {0,1}

{N}

nจำนวนเต็มไม่เป็นลบ ตรงกับnครั้ง ยกตัวอย่างเช่น "o {2}" และ "บ๊อบ" ใน "O" ไม่ตรง แต่ "อาหาร" ของทั้งสอง "O" การแข่งขัน

{n}

nจำนวนเต็มไม่เป็นลบ การแข่งขันในเวลาที่น้อยnยกตัวอย่างเช่น "o {2}" ไม่ตรงกับ "บ๊อบ" ใน "O" และการแข่งขัน "foooood" ยี่ห้อ O "o {1}" เทียบเท่ากับ "o +" "o {0}" เทียบเท่ากับ "o *"

{n,m}

Mและจำนวนเต็มn ไม่ใช่เชิงลบที่n <= m การแข่งขันอย่างน้อยn และที่มากที่สุดครั้งเมตรยกตัวอย่างเช่น "o {1,3}" การแข่งขัน "fooooood" ในครั้งแรกสาม o 'O {0,1}' เท่ากับ 'O' หมายเหตุ: คุณไม่สามารถแทรกช่องว่างระหว่างเครื่องหมายจุลภาคและตัวเลข

?

เมื่อตัวอักษรที่ใช้ในรอบคัดเลือกอื่น ๆ (* +? { {n,}, {N, N m}}) ต่อมาจับคู่รูปแบบคือ "ไม่โลภ." "ไม่โลภ" รูปแบบการจับคู่เพื่อค้นหาสตริงสั้นที่เป็นไปได้และเริ่มต้น "โลภ" รูปแบบการจับคู่เพื่อค้นหาสายยาวที่เป็นไปได้ ยกตัวอย่างเช่นในสตริง "oooo" ใน "o +?" แมตช์เพียงคนเดียว "O" และ "o +" ตรงกับทุก "O"

.

ตรงกับตัวอักษรตัวเดียวใด ๆ ยกเว้น "\ r \ n" คือ เพื่อให้ตรงกับรวมถึง "\ r \ n" รวมทั้งตัวอักษรใด ๆ เช่นรูปแบบการใช้งาน "[\ S \ s]" หรือชอบ

(รูปแบบ)

จับคู่รูปแบบและการจับsubexpression ของการแข่งขัน คุณสามารถใช้คุณสมบัติที่$ 0 th. $ 9 ตรงกับผลที่ได้จาก "ตรงกับ" คอลเลกชันที่จะดึงจับเพื่อให้ตรงกับตัวอักษรวงเล็บ () ให้ใช้ "\ (" หรือ "\)."

(:รูปแบบ)

จับคู่รูปแบบแต่ไม่ได้จับ subexpression การแข่งขันว่ามันเป็นคู่ที่ไม่ใช่การจับภาพการจับคู่ไม่ได้เก็บไว้เพื่อใช้ในภายหลัง นี้สำหรับใช้ "หรือ" ตัวอักษร (|) เมื่อส่วนประกอบรวมกันโหมดที่มีประโยชน์ ตัวอย่างเช่น 'industr (? Y | IES) คืออัตราส่วนของ' อุตสาหกรรม | แสดงออกประหยัดมากขึ้นอุตสาหกรรม

(?= รูปแบบ)

การแสดงไปข้างหน้าทำนาย subexpressionค้นหาแรกรูปแบบการจับคู่สายสตริงที่จุดเริ่มต้นของการจับคู่การแสดงออกมันเป็นคู่ที่ไม่ใช่การจับภาพที่ไม่ได้จับภาพการแข่งขันเพื่อใช้ในภายหลัง ตัวอย่างเช่น 'Windows (= 95? | 98 | NT | 2000)' การจับคู่ "Windows 2000" "Windows" แต่ไม่ตรงกับ "Windows 3.1" ใน "Windows" Lookahead ไม่ใช้ตัวอักษรคือหลังจากที่การแข่งขันเกิดขึ้นการแข่งขันต่อไปสำหรับการค้นหาของคุณทันทีหลังจากที่การแข่งขันที่ผ่านมาไม่ได้หลังจากการคาดการณ์ครั้งแรกในองค์ประกอบของตัวละคร

(?!รูปแบบ)

Lookahead subexpressionดำเนินการค้นหาย้อนกลับแสดงออกไม่ตรงกับรูปแบบการจับคู่สายในจุดเริ่มต้นของสตริงการค้นหามันเป็นคู่ที่ไม่ใช่การจับภาพที่ไม่ได้จับภาพการแข่งขันเพื่อใช้ในภายหลัง ตัวอย่างเช่น 'Windows (95 | 98 ?! | NT | 2000)' ตรงกับ "Windows 3.1" ใน "Windows" แต่ไม่ตรงกับ "Windows 2000" "Windows" Lookahead ไม่ใช้ตัวอักษรคือหลังจากที่การแข่งขันเกิดขึ้นการแข่งขันต่อไปสำหรับการค้นหาของคุณทันทีหลังจากที่การแข่งขันที่ผ่านมาไม่ได้หลังจากการคาดการณ์ครั้งแรกในองค์ประกอบของตัวละคร

xy|

การแข่งขันXหรือYตัวอย่างเช่น 'Z | อาหาร' ตรงกับ "Z" หรือ "อาหาร" '(Z | F) อู๊ด' จับคู่ "zood" หรือ "อาหาร"

[Xyz]

ชุดอักขระ ตรงกับตัวอักษรใด ๆ รวม ยกตัวอย่างเช่น "[ABC]" การแข่งขัน "ธรรมดา" ใน "A"

[^Xyz]

ชุดตัวอักษรย้อนกลับ ตรงกับตัวอักษรใด ๆ ไม่รวม ยกตัวอย่างเช่น "[^ abc]" ตรงกับ "ธรรมดา" ใน "P", "L", "ฉัน", "n"

[Az]

ช่วงของตัวอักษร ตรงกับตัวอักษรใด ๆ ในช่วงที่ระบุ ยกตัวอย่างเช่น "[az]" การแข่งขัน "A" ตัวอักษรตัวพิมพ์เล็กใด ๆ ใน "Z" ช่วง

[^Az]

ช่วงหลังของตัวละคร ตรงกับตัวอักษรใด ๆ ไม่ได้อยู่ในช่วงที่ระบุ ยกตัวอย่างเช่น "[^ az]" ตรงกับใด ๆ ที่ไม่ "A" ใด ๆ ของตัวละครใน "Z" ช่วง

\ B

ตรงกับขอบเขตของคำว่าเป็นตำแหน่งของคำและช่องว่างระหว่าง ยกตัวอย่างเช่น "เอ้อ \ B" ตรงกับ "ไม่เคย" ใน "ER" แต่ไม่ตรงกับ "คำกริยา" ใน "ER"

\ B

ตรงกับเขตแดนไม่ใช่คำ "เอ่อ \ B" ตรงกับ "คำกริยา" ใน "ER" แต่ไม่ตรงกับ "ไม่เคย" ใน "ER"

\C X

ควบคุมตัวละครตรงกับที่ระบุโดยxยกตัวอย่างเช่น \ cM ตรงกับการควบคุม-M หรือกลับรถค่าของ xจะต้องอยู่ระหว่าง AZ หรือ az ถ้าไม่ได้ก็จะสันนิษฐานว่า c คือ "C" ตัวละครของตัวเอง

\ D

ที่ตรงกับตัวละครที่เป็นตัวเลข เทียบเท่ากับ [0-9]

\ D

ตรงกับอักขระที่ไม่ใช่ตัวเลข มันจะเทียบเท่ากับ [^ 0-9]

\ F

การแข่งขัน Formfeed เทียบเท่ากับ \ x0c และ \ cL

\ n

ตรงกับขึ้นบรรทัดใหม่ เทียบเท่ากับ \ X0A และ \ CJ

\ r

ตรงกับที่กลับรถ เทียบเท่ากับ \ x0d และ \ cM

\ S

ตรงกับตัวอักษรช่องว่างใด ๆ รวมถึงช่องว่างแท็บแบ่งหน้า ฯลฯ เทียบเท่ากับ [\ F \ n \ r \ t \ V]

\ S

ตรงกับตัวละครที่ไม่ใช่ช่องว่าง เทียบเท่ากับ [^ \ F \ n \ r \ t \ V]

\ t

แท็บการแข่งขัน และ \ x09 และ \ CI เทียบเท่า

\ V

ตรงกับอักขระแท็บแนวตั้ง และ \ x0b และ \ เทียบเท่า cK

\ W

ตรงกับตัวละครตัวละครระดับรวมทั้งขีด และ "[a-ZA-z0-9_]" เทียบเท่า

\ W

ตรงกับตัวละครที่ไม่ใช่คำใด ๆ และ "[^ A-ZA-z0-9_]" เทียบเท่า

\n X

MatchN,N นี่เป็นรหัสเลขฐานสิบหกหลบหนี รหัสเลขฐานสิบหกหลบหนีต้องเป็นตัวเลขสองหลักยาว ยกตัวอย่างเช่น "\ X41" จับคู่ "A" "\ X041" และ "\ x04" และ "1" จะเทียบเท่า ช่วยให้การใช้การแสดงออกปกติรหัสแอสกี

\Num

MatchNUM,NUM นี่เป็นจำนวนเต็มบวก ในการจับภาพ backreferences จับคู่ ยกตัวอย่างเช่น "(.) \ 1" ตรงกับตัวละครทั้งสองเหมือนกันติดต่อกัน

\n

ระบุรหัสหลบหนีฐานแปดหรือกลับอ้างอิง หาก \nนำโดย subexpressions จับอย่างน้อยnแล้วnเป็น backreference มิฉะนั้นถ้าnเป็นตัวเลขฐานแปด (0-7) แล้วnเป็นรหัสหนีฐานแปด

\นิวตันเมตร

ระบุรหัสหลบหนีฐานแปดหรือกลับอ้างอิง หาก \นาโนเมตรในด้านหน้าของsubexpressionจับอย่างน้อยนาโนเมตรแล้วนาโนเมตรเป็นbackreference หาก \นาโนเมตรอย่างน้อยในหน้าของการจับภาพN,Nเป็น backreference ตามด้วยตัวอักษรMหากทั้งสองกรณีที่ก่อนหน้านี้ไม่ได้อยู่\นาโนเมตรตรงกับนาโนเมตรค่าฐานแปดที่nและmเป็นตัวเลขฐานแปด (0-7)

\ NML

เมื่อnคือตัวเลขฐานแปด(0-3),M และLมีฐานแปด (0-7) มันตรงกับรหัสหนีฐานแปดNML

\n U

ตรงกันn โดยที่n คืออักขระ Unicode ตัวแทนจากสี่เลขฐานสิบหก ยกตัวอย่างเช่น \ u00A9 ตรงกับสัญลักษณ์ลิขสิทธิ์ (©)

วิธีการเรียน Matcher

วิธีการที่ดัชนี

วิธีการให้ดัชนีมีค่าดัชนีบ่งชี้ได้อย่างแม่นยำที่มีประโยชน์ที่จะหาตรงกับสายการป้อนข้อมูล:

เลขที่ วิธีการและรายละเอียด
1 เริ่มต้น int สาธารณะ ()
ส่งกลับค่าดัชนีเริ่มต้นของการแข่งขันที่ผ่านมา
2 เริ่มต้น int สาธารณะ (กลุ่ม int)
ย้อนกลับไปในการดำเนินงานในระหว่างการแข่งขันก่อนหน้านี้ถูกจับโดยกลุ่มที่ได้รับการย่อยลำดับดัชนีเริ่มต้น
3 สาธารณะท้าย int ()
ผลตอบแทนชดเชยหลังจากที่ตัวอักษรตัวสุดท้ายจับคู่
4 ท้าย int สาธารณะ (กลุ่ม int)
ย้อนกลับไปในการดำเนินงานในระหว่างการแข่งขันที่ผ่านมาโดยได้รับการชดเชยหลังจากที่กลุ่มสุดท้ายของตัวละครหลังจากที่ลำดับของการจับภาพ

ระเบียบวิธีวิจัย

วิธีการที่ใช้ในการตรวจสอบสายเข้าและส่งกลับค่าบูลีนแสดงให้เห็นหรือไม่ว่ารูปแบบที่พบ:

เลขที่ วิธีการและรายละเอียด
1 lookingAt ประชาชน boolean ()
ลองพื้นที่จากจุดเริ่มต้นของการเริ่มต้นของลำดับการป้อนข้อมูลที่ตรงกับรูปแบบ
2 ประชาชนบูลีนหา ()
พยายามที่จะหาลำดับการป้อนข้อมูลที่ตรงกับรูปแบบของลำดับถัดไป
3 ประชาชน boolean หา (เริ่มต้น int)
รีเซ็ตการจับคู่นี้และแล้วความพยายามที่จะหาคู่สำหรับรูปแบบป้อนย่อยลำดับถัดไปเริ่มต้นจากดัชนีที่ระบุ
4 แมตช์บูลีนสาธารณะ ()
ลองทั้งภูมิภาคและการจับคู่รูปแบบ

วิธีการเปลี่ยน

ทางเลือกคือการแทนที่สตริงในวิธีการป้อนข้อความ:

เลขที่ วิธีการและรายละเอียด
1 ประชาชน Matcher appendReplacement (StringBuffer SB, String ทดแทน)
เพื่อให้บรรลุไม่ใช่ขั้วเพิ่มและขั้นตอนการแทน
2 ประชาชน StringBuffer appendTail (StringBuffer SB)
บรรลุการเพิ่มและการแทนขั้วขั้นตอน
3 String สาธารณะ replaceAll (String ทดแทน)
เปลี่ยนโหมดกับสตริงทดแทนที่กำหนดให้ตรงกับลำดับการป้อนข้อมูลสำหรับแต่ละลำดับ
4 String สาธารณะ replaceFirst (String ทดแทน)
เปลี่ยนโหมดกับสตริงทดแทนที่ได้รับการจับคู่การป้อนข้อมูลลำดับแรกย่อยลำดับ
5 สาธารณะคง String quoteReplacement (String s)
ส่งกลับสตริงทดแทนที่แท้จริง วิธีการนี้จะส่งกลับสตริงที่ถูกส่งผ่านเป็นวิธีการในการทำงานระดับ appendReplacement Matcher เป็นสตริงตัวอักษรที่

วิธีการเริ่มต้นและสิ้นสุด

นี่คือตัวอย่างของจำนวนของการเกิดขึ้นในสายป้อนสำหรับการนับคำว่า "แมว" ปรากฏนี้:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "\\bcat\\b";
    private static final String INPUT =
                                    "cat cat cat cattie cat";

    public static void main( String args[] ){
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // 获取 matcher 对象
       int count = 0;

       while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

ตัวอย่างข้างต้นรวบรวมผลมีดังนี้

Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22

นี้สามารถเห็นได้โดยใช้ขอบเขตตัวอย่างเช่นคำว่าเพื่อให้แน่ใจว่าตัวอักษร "C" "A" T "" ไม่ได้เป็นเพียงคำสตริงยาว นอกจากนี้ยังมีบางตำแหน่งข้อมูลที่เป็นประโยชน์เกี่ยวกับสายป้อนจะถูกจับคู่

วิธีการเริ่มต้นผลตอบแทนที่ได้ดำเนินการในระหว่างการแข่งขันก่อนหน้านี้จากเริ่มต้นดัชนีที่กำหนดกลุ่มจับ subsequence จบวิธีการจับคู่สุดท้ายดัชนีบวกตัวละครหนึ่ง

การแข่งขันและวิธีการ lookingAt

การแข่งขันและวิธีการ lookingAt จะใช้ในการพยายามให้ตรงกับลำดับของรูปแบบการป้อนข้อมูล พวกเขามีความแตกต่างจากความต้องการของการจับคู่จับคู่ลำดับทั้งหมด แต่ lookingAt ไม่จำเป็นต้องใช้

ทั้งสองวิธีมักจะใช้ในสายป้อนเริ่มต้น

ผ่านตัวอย่างต่อไปนี้จะอธิบายคุณลักษณะนี้:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static final String REGEX = "foo";
    private static final String INPUT = "fooooooooooooooooo";
    private static Pattern pattern;
    private static Matcher matcher;

    public static void main( String args[] ){
       pattern = Pattern.compile(REGEX);
       matcher = pattern.matcher(INPUT);

       System.out.println("Current REGEX is: "+REGEX);
       System.out.println("Current INPUT is: "+INPUT);

       System.out.println("lookingAt(): "+matcher.lookingAt());
       System.out.println("matches(): "+matcher.matches());
   }
}

ตัวอย่างข้างต้นรวบรวมผลมีดังนี้

Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false

วิธีการ replaceFirst และ replaceAll

replaceFirst และวิธี replaceAll ใช้ในการแทนที่ข้อความที่ตรงกับการแสดงออกปกติ ความแตกต่างคือ replaceFirst แทนที่นัดแรก replaceAll แทนที่การแข่งขันทั้งหมด

ตัวอย่างต่อไปนี้จะอธิบายคุณลักษณะนี้:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    private static String REGEX = "dog";
    private static String INPUT = "The dog says meow. " +
                                    "All dogs say meow.";
    private static String REPLACE = "cat";

    public static void main(String[] args) {
       Pattern p = Pattern.compile(REGEX);
       // get a matcher object
       Matcher m = p.matcher(INPUT); 
       INPUT = m.replaceAll(REPLACE);
       System.out.println(INPUT);
   }
}

ตัวอย่างข้างต้นรวบรวมผลมีดังนี้

The cat says meow. All cats say meow.

วิธีการ appendReplacement และ appendTail

ระดับ Matcher นอกจากนี้ยังมีวิธีการสำหรับการ appendTail appendReplacement และแทนที่ข้อความ:

ดูตัวอย่างต่อไปนี้จะอธิบายคุณลักษณะนี้:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
   private static String REGEX = "a*b";
   private static String INPUT = "aabfooaabfooabfoob";
   private static String REPLACE = "-";
   public static void main(String[] args) {
      Pattern p = Pattern.compile(REGEX);
      // 获取 matcher 对象
      Matcher m = p.matcher(INPUT);
      StringBuffer sb = new StringBuffer();
      while(m.find()){
         m.appendReplacement(sb,REPLACE);
      }
      m.appendTail(sb);
      System.out.println(sb.toString());
   }
}

ตัวอย่างข้างต้นรวบรวมผลมีดังนี้

-foo-foo-foo-

วิธีการเรียน PatternSyntaxException

PatternSyntaxException เป็นชั้นยกเว้นไม่ได้รับคำสั่งซึ่งบ่งชี้ข้อผิดพลาดไวยากรณ์รูปแบบการแสดงออกปกติ

ระดับ PatternSyntaxException มีวิธีการดังต่อไปนี้เพื่อช่วยให้เรามองเห็นสิ่งที่เกิดข้อผิดพลาด

เลขที่ วิธีการและรายละเอียด
1 String สาธารณะ getDescription ()
ได้รับรายละเอียดของข้อผิดพลาด
2 int สาธารณะ getIndex ()
รับดัชนีที่ไม่ถูกต้อง
3 String สาธารณะ getPattern ()
ได้รับรูปแบบการแสดงออกที่ผิดพลาดเป็นประจำ
4 String สาธารณะ getMessage ()
ส่งกลับสตริงหลายคู่สายที่มีรายละเอียดของข้อผิดพลาดทางไวยากรณ์และดัชนีบ่งชี้ภาพที่ผิดพลาดของรูปแบบการแสดงออกปกติและดัชนีข้อผิดพลาด
การแสดงออกปกติ Java
10/30