Latest web development tutorials
×

Java หลักสูตร

Java หลักสูตร Java แนะนำโดยย่อ Java การกำหนดค่าการพัฒนาสภาพแวดล้อม Java พื้นฐานไวยากรณ์ Java วัตถุและการเรียน Java ชนิดข้อมูลพื้นฐาน Java ประเภทตัวแปร Java การปรับเปลี่ยน Java ผู้ประกอบการ Java โครงสร้างห่วง Java สาขาโครงสร้าง Java Number หมวดหมู่ Java Character หมวดหมู่ Java String หมวดหมู่ Java StringBuffer Java แถว Java วันที่เวลา Java นิพจน์ปกติ Java ทาง Java Stream,File,IO Java Scanner หมวดหมู่ Java การจัดการข้อยกเว้น

Java เชิงวัตถุ

Java สืบทอด Java Override/Overload Java polymorphism Java ระดับนามธรรม Java บรรจุภัณฑ์ Java อินเตอร์เฟซ Java บรรจุภัณฑ์

Java การสอนที่ทันสมัย

Java โครงสร้างข้อมูล Java คอลเลกชันกรอบ Java ยาชื่อสามัญ Java การทำให้เป็นอันดับ Java เขียนโปรแกรมเครือข่าย Java ส่ง Email Java การเขียนโปรแกรมแบบมัลติเธรด Java Appletรากฐาน Java เอกสารความคิดเห็น Java ตัวอย่าง Java 8 คุณสมบัติใหม่ Java MySQL สัมพันธ์

การแสดงออกปกติ 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 ... $ 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 ()
ส่งกลับสตริงหลายคู่สายที่มีรายละเอียดของข้อผิดพลาดทางไวยากรณ์และดัชนีบ่งชี้ภาพที่ผิดพลาดของรูปแบบการแสดงออกปกติและดัชนีข้อผิดพลาด