Java Regex - คู่มือฉบับย่อ

Java จัดเตรียมแพ็กเกจ java.util.regex สำหรับการจับคู่รูปแบบกับนิพจน์ทั่วไป นิพจน์ทั่วไปของ Java นั้นคล้ายกับภาษาโปรแกรม Perl มากและเรียนรู้ได้ง่ายมาก

นิพจน์ทั่วไปคือลำดับพิเศษของอักขระที่ช่วยให้คุณจับคู่หรือค้นหาสตริงหรือชุดของสตริงอื่น ๆ โดยใช้ไวยากรณ์เฉพาะที่จัดขึ้นในรูปแบบ สามารถใช้เพื่อค้นหาแก้ไขหรือจัดการข้อความและข้อมูล

แพ็คเกจ java.util.regex ส่วนใหญ่ประกอบด้วยสามคลาสต่อไปนี้ -

  • Pattern Class- วัตถุ Pattern คือการแสดงนิพจน์ทั่วไปที่รวบรวม คลาส Pattern ไม่มีตัวสร้างสาธารณะ ในการสร้างรูปแบบคุณต้องเรียกใช้หนึ่งในแบบคงที่สาธารณะก่อนcompile()วิธีการซึ่งจะส่งคืนวัตถุ Pattern วิธีการเหล่านี้ยอมรับนิพจน์ทั่วไปเป็นอาร์กิวเมนต์แรก

  • Matcher Class- วัตถุ Matcher เป็นเครื่องมือที่ตีความรูปแบบและดำเนินการจับคู่กับสตริงอินพุต เช่นเดียวกับคลาส Pattern Matcher ไม่ได้กำหนดตัวสร้างสาธารณะ คุณได้รับวัตถุ Matcher โดยเรียกใช้ไฟล์matcher() วิธีการบนวัตถุ Pattern

  • 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 to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      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

บทนำ

java.util.regex.MatchResultอินเทอร์เฟซแสดงถึงผลลัพธ์ของการดำเนินการจับคู่ อินเทอร์เฟซนี้มีวิธีการสืบค้นที่ใช้เพื่อกำหนดผลลัพธ์ของการจับคู่กับนิพจน์ทั่วไป ขอบเขตการจับคู่กลุ่มและขอบเขตของกลุ่มสามารถมองเห็นได้ แต่ไม่สามารถแก้ไขได้ผ่าน MatchResult

การประกาศอินเทอร์เฟซ

ต่อไปนี้เป็นคำประกาศสำหรับ java.util.regex.MatchResult อินเตอร์เฟซ -

public interface MatchResult

วิธีการเชื่อมต่อ

ซีเนียร์ No วิธีการและคำอธิบาย
1 สิ้นสุด int ()

ส่งคืนค่าชดเชยหลังจากอักขระสุดท้ายที่ตรงกัน

2 int end (กลุ่ม int)

ส่งคืนค่าชดเชยหลังจากอักขระสุดท้ายของลำดับต่อมาที่กลุ่มที่กำหนดระหว่างการแข่งขันนี้

3 กลุ่มสตริง ()

ส่งคืนอินพุตลำดับต่อมาที่ตรงกับการจับคู่ก่อนหน้า

4 กลุ่มสตริง (กลุ่ม int)

ส่งคืนอินพุตลำดับต่อมาที่จับโดยกลุ่มที่ระบุระหว่างการดำเนินการจับคู่ก่อนหน้า

5 int groupCount ()

ส่งคืนจำนวนกลุ่มการจับภาพในรูปแบบผลการแข่งขันนี้

6 int เริ่มต้น ()

ส่งกลับดัชนีเริ่มต้นของการแข่งขัน

7 int เริ่มต้น (กลุ่ม int)

ส่งกลับดัชนีเริ่มต้นของลำดับต่อมาที่จับโดยกลุ่มที่ระบุในระหว่างการแข่งขันนี้

บทนำ

java.util.regex.Pattern คลาสแสดงการแทนการคอมไพล์ของนิพจน์ทั่วไป

การประกาศคลาส

ต่อไปนี้เป็นคำประกาศสำหรับ java.util.regex.Pattern ชั้นเรียน -

public final class Pattern
   extends Object
      implements Serializable

ฟิลด์

ต่อไปนี้เป็นฟิลด์สำหรับ java.util.regex.Duration ชั้นเรียน -

  • static int CANON_EQ - เปิดใช้งานการเทียบเท่ามาตรฐาน

  • static int CASE_INSENSITIVE - เปิดใช้งานการจับคู่แบบไม่คำนึงถึงขนาดตัวพิมพ์

  • static int COMMENTS - อนุญาตช่องว่างและความคิดเห็นในรูปแบบ

  • static int DOTALL - เปิดใช้งานโหมด dotall

  • static int LITERAL - เปิดใช้งานการแยกวิเคราะห์รูปแบบตามตัวอักษร

  • static int MULTILINE - เปิดใช้งานโหมดมัลติไลน์

  • static int UNICODE_CASE - เปิดใช้งานการพับเคสแบบ Unicode-Aware

  • static int UNICODE_CHARACTER_CLASS - เปิดใช้งานคลาสอักขระที่กำหนดไว้ล่วงหน้าและคลาสอักขระ POSIX เวอร์ชัน Unicode

  • static int UNIX_LINES - เปิดใช้งานโหมด Unix lines

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

ซีเนียร์ No วิธีการและคำอธิบาย
1 คอมไพล์รูปแบบคงที่ (String regex)

รวบรวมนิพจน์ทั่วไปที่กำหนดให้เป็นรูปแบบ

2 คอมไพล์รูปแบบคงที่ (String regex, int แฟล็ก)

คอมไพล์นิพจน์ทั่วไปที่กำหนดให้เป็นรูปแบบที่มีแฟล็กที่กำหนด

3 int ธง ()

ส่งคืนแฟล็กการจับคู่ของรูปแบบนี้

4 Matcher Matcher (อินพุต CharSequence)

สร้างตัวจับคู่ที่จะจับคู่อินพุตที่กำหนดกับรูปแบบนี้

5 การจับคู่บูลีนแบบคงที่ (String regex, CharSequence input)

คอมไพล์นิพจน์ทั่วไปที่กำหนดและพยายามจับคู่อินพุตที่กำหนดกับมัน

6 รูปแบบสตริง ()

ส่งคืนนิพจน์ทั่วไปที่คอมไพล์รูปแบบนี้

7 คำพูดสตริงแบบคงที่ (สตริง s)

ส่งคืนสตริงรูปแบบลิเทอรัลสำหรับสตริงที่ระบุ

8 สตริง [] แยก (อินพุต CharSequence)

แบ่งลำดับการป้อนข้อมูลที่กำหนดตามการจับคู่ของรูปแบบนี้

9 สตริง [] แยก (อินพุต CharSequence ขีด จำกัด int)

แบ่งลำดับการป้อนข้อมูลที่กำหนดตามการจับคู่ของรูปแบบนี้

10 สตริง toString ()

ส่งกลับการแสดงสตริงของรูปแบบนี้

วิธีการสืบทอด

คลาสนี้สืบทอดวิธีการจากคลาสต่อไปนี้ -

  • Java.lang.Object

บทนำ

java.util.regex.Matcher คลาสทำหน้าที่เป็นเอ็นจิ้นที่ดำเนินการจับคู่การดำเนินการกับลำดับอักขระโดยการตีความ Pattern

การประกาศคลาส

ต่อไปนี้เป็นคำประกาศสำหรับ java.util.regex.Matcher ชั้นเรียน -

public final class Matcher
   extends Object
      implements MatchResult

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

ซีเนียร์ No วิธีการและคำอธิบาย
1 Matcher appendReplacement (StringBuffer sb, การเปลี่ยนสตริง)

ใช้ขั้นตอนการผนวกและแทนที่ที่ไม่ใช่เทอร์มินัล

2 StringBuffer appendTail (StringBuffer sb)

ใช้ขั้นตอนต่อท้ายและแทนที่เทอร์มินัล

3 สิ้นสุด int ()

ส่งคืนค่าชดเชยหลังจากอักขระสุดท้ายที่ตรงกัน

4 int end (กลุ่ม int)

ส่งคืนค่าชดเชยหลังจากอักขระสุดท้ายของลำดับต่อมาที่จับโดยกลุ่มที่ระบุระหว่างการดำเนินการจับคู่ก่อนหน้า

5 หาบูลีน ()

พยายามค้นหาลำดับต่อไปของลำดับอินพุตที่ตรงกับรูปแบบ

6 หาบูลีน (เริ่มต้น int)

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

7 กลุ่มสตริง ()

ส่งคืนอินพุตลำดับต่อมาที่จับโดยกลุ่มที่ระบุระหว่างการดำเนินการจับคู่ก่อนหน้า

8 กลุ่มสตริง (ชื่อสตริง)

ส่งคืนอินพุตที่ตามมาที่จับโดยกลุ่มการจับชื่อที่กำหนดระหว่างการดำเนินการจับคู่ก่อนหน้า

9 int groupCount ()

ส่งคืนจำนวนกลุ่มการจับภาพในรูปแบบของตัวจับคู่นี้

10 บูลีน hasAnchoringBounds ()

ค้นหาการยึดขอบเขตขอบเขตสำหรับตัวจับคู่นี้

11 บูลีน hasTransparentBounds ()

ค้นหาความโปร่งใสของขอบเขตพื้นที่สำหรับตัวจับคู่นี้

12 บูลีน hitEnd ()

ส่งคืนจริงหากจุดสิ้นสุดของอินพุตถูกตีโดยเครื่องมือค้นหาในการดำเนินการจับคู่ล่าสุดที่ดำเนินการโดยตัวจับคู่นี้

13 บูลีน lookingAt ()

พยายามจับคู่ลำดับการป้อนข้อมูลโดยเริ่มต้นที่จุดเริ่มต้นของภูมิภาคกับรูปแบบ

14 การจับคู่บูลีน ()

พยายามจับคู่ภูมิภาคทั้งหมดกับรูปแบบ

15 แบบลาย ()

ส่งคืนรูปแบบที่ถูกตีความโดยตัวจับคู่นี้

16 คำพูดสตริงแบบคงที่การแทนที่ (สตริง s)

ส่งคืนสตริงการแทนที่ตามตัวอักษรสำหรับสตริงที่ระบุ

17 Matcher region (int start, int end)

ตั้งค่าขีด จำกัด ของภูมิภาคของผู้จับคู่นี้

18 int regionEnd ()

รายงานดัชนีสิ้นสุด (เฉพาะ) ของภูมิภาคของผู้จับคู่นี้

19 int regionStart ()

รายงานดัชนีเริ่มต้นของภูมิภาคของผู้จับคู่นี้

20 String replaceAll (การเปลี่ยนสตริง)

แทนที่ลำดับการป้อนข้อมูลในลำดับต่อ ๆ มาที่ตรงกับรูปแบบด้วยสตริงแทนที่ที่กำหนด

21 String replaceFirst (การเปลี่ยนสตริง)

แทนที่ลำดับการป้อนข้อมูลลำดับแรกที่ตรงกับรูปแบบด้วยสตริงการแทนที่ที่กำหนด

22 บูลีน needEnd ()

ส่งคืนค่าจริงหากอินพุตมากขึ้นสามารถเปลี่ยนการจับคู่เชิงบวกเป็นค่าลบ

23 รีเซ็ต Matcher ()

รีเซ็ตตัวจับคู่นี้

24 รีเซ็ต Matcher (อินพุต CharSequence)

รีเซ็ตตัวจับคู่นี้ด้วยลำดับการป้อนข้อมูลใหม่

25 int เริ่มต้น ()

ส่งคืนดัชนีเริ่มต้นของการแข่งขันก่อนหน้า

26 int เริ่มต้น (กลุ่ม int)

ส่งคืนดัชนีเริ่มต้นของลำดับต่อมาที่จับโดยกลุ่มที่ระบุระหว่างการดำเนินการจับคู่ก่อนหน้า

27 MatchResult เป็นMatchResult ()

ส่งคืนสถานะการจับคู่ของตัวจับคู่นี้เป็น MatchResult

28 สตริง toString ()

ส่งกลับการแสดงสตริงของตัวจับคู่นี้

29 การใช้ Matcher AnchoringBounds (บูลีน b)

ตั้งค่าการยึดขอบเขตขอบเขตสำหรับตัวจับคู่นี้

30 Matcher usePattern (รูปแบบ newPattern)

เปลี่ยนรูปแบบที่ Matcher นี้ใช้เพื่อค้นหารายการที่ตรงกัน

31 Matcher useTransparentBounds (บูลีน b)

ตั้งค่าความโปร่งใสของขอบเขตพื้นที่สำหรับตัวจับคู่นี้

วิธีการสืบทอด

คลาสนี้สืบทอดวิธีการจากคลาสต่อไปนี้ -

  • Java.lang.Object

บทนำ

java.util.regex.PatternSyntaxException คลาสแสดงถึงข้อยกเว้นที่ไม่ได้ตรวจสอบที่ส่งมาเพื่อระบุข้อผิดพลาดทางไวยากรณ์ในรูปแบบนิพจน์ทั่วไป

การประกาศคลาส

ต่อไปนี้เป็นคำประกาศสำหรับ java.util.regex.PatternSyntaxException ชั้นเรียน -

public class PatternSyntaxException
   extends IllegalArgumentException

ตัวสร้าง

ซีเนียร์ No วิธีการและคำอธิบาย
1 PatternSyntaxException(String desc, String regex, int index)

สร้างอินสแตนซ์ใหม่ของคลาสนี้

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

ซีเนียร์ No วิธีการและคำอธิบาย
1 String getDescription()

ดึงคำอธิบายของข้อผิดพลาด

2 int getIndex()

ดึงดัชนีข้อผิดพลาด

3 String getMessage()

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

4 String getPattern()

ดึงรูปแบบนิพจน์ทั่วไปที่ผิดพลาด

วิธีการสืบทอด

คลาสนี้สืบทอดวิธีการจากคลาสต่อไปนี้ -

  • Java.lang.Throwable
  • Java.lang.Object

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้เมธอดคลาส java.util.regex.Pattern.PatternSyntaxException

package com.tutorialspoint;

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

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

   public static void main(String[] args) {
      try{
         Pattern pattern = Pattern.compile(REGEX);
         
         // get a matcher object
         Matcher matcher = pattern.matcher(INPUT); 
         INPUT = matcher.replaceAll(REPLACE);
      } catch(PatternSyntaxException e){
         System.out.println("PatternSyntaxException: ");
         System.out.println("Description: "+ e.getDescription());
         System.out.println("Index: "+ e.getIndex());
         System.out.println("Message: "+ e.getMessage());
         System.out.println("Pattern: "+ e.getPattern());
      }
   }
}

ให้เรารวบรวมและรันโปรแกรมข้างต้นซึ่งจะให้ผลลัพธ์ดังต่อไปนี้ -

PatternSyntaxException: 
Description: Unclosed character class
Index: 0
Message: Unclosed character class near index 0
[
^
Pattern: [

ต่อไปนี้เป็นตัวอย่างต่างๆของอักขระที่ตรงกันโดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 x

อักขระ x

2 \\

อักขระแบ็กสแลช

3 \ 0 น

อักขระที่มีค่าฐานแปด 0n (0 ≤ n ≤ 7)

4 \ 0nn

อักขระที่มีค่าฐานแปด 0nn (0 ≤ n ≤ 7)

5 \ 0 นาที

อักขระที่มีค่าฐานแปด 0mnn (0 ≤ m ≤ 3, 0 ≤ n ≤ 7)

6 \ xhh

อักขระที่มีค่าฐานสิบหก 0xhh

7 \ uhhhh

อักขระที่มีค่าฐานสิบหก 0xhhhh

8 \ t

อักขระแท็บ ('\ u0009')

9 \ n

อักขระขึ้นบรรทัดใหม่ (ฟีดบรรทัด) ('\ u000A')

10 \ r

อักขระ carriage-return ('\ u000D')

11 \ ฉ

อักขระฟอร์มฟีด ('\ u000C')

ต่อไปนี้เป็นตัวอย่างต่างๆของคลาสอักขระที่ตรงกันโดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 [abc]

a, b หรือ c (คลาสง่าย ๆ )

2 [^ abc]

อักขระใด ๆ ยกเว้น a, b หรือ c (การปฏิเสธ)

3 [a-zA-Z]

a ถึง z หรือ A ถึง Z รวม (ช่วง)

4 [โฆษณา [mp]]

a ถึง d หรือ m ถึง p: [a-dm-p] (สหภาพ)

5 [az && [def]]

d, e หรือ f (จุดตัด)

6 [az && [^ bc]]

a ถึง z ยกเว้น b และ c: [ad-z] (การลบ)

7 [az && [^ mp]]

a ถึง z ไม่ใช่ m ถึง p: [a-lq-z] (การลบ)

ต่อไปนี้เป็นตัวอย่างต่างๆของการจับคู่คลาสอักขระที่กำหนดไว้ล่วงหน้าโดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 .

อักขระใด ๆ (อาจตรงหรือไม่ตรงกับตัวยุติบรรทัด)

2 \ d

ตัวเลข: [0-9]

3 \ D

ไม่ใช่ตัวเลข: [^ 0-9]

4 \ s

อักขระเว้นวรรค: [\ t \ n \ x0B \ f \ r]

5 \ S

อักขระที่ไม่ใช่ช่องว่าง: [^ \ s]

6 \ w

อักขระคำ: [a-zA-Z_0-9]

7 \ ว

อักขระที่ไม่ใช่คำ: [^ \ w]

ต่อไปนี้เป็นตัวอย่างต่างๆของคลาสอักขระ POSIX ที่ตรงกันโดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 \ p {ล่าง}

ตัวอักษรตัวพิมพ์เล็ก: [az]

2 \ p {ตอนบน}

ตัวอักษรตัวพิมพ์ใหญ่: [AZ]

3 \ p {ASCII}

ASCII ทั้งหมด: [\ x00- \ x7F]

4 \ p {อัลฟ่า}

อักขระตามตัวอักษร: [\ p {Lower} \ p {Upper}]

5 \ p {Digit}

เลขฐานสิบ: [0-9]

6 \ p {Alnum}

อักขระที่เป็นตัวเลขและตัวอักษร: [\ p {Alpha} \ p {Digit}]

7 \ p {เครื่องหมายวรรคตอน}

เครื่องหมายวรรคตอน: หนึ่งใน! "# $% & '() * +, -. / :; <=>? @ [\] ^ _> {|} <.

8 \ p {กราฟ}

อักขระที่มองเห็นได้: [\ p {Alnum} \ p {Punct}]

9 \ p {พิมพ์}

อักขระที่พิมพ์ได้: [\ p {Graph} \ x20]

10 \ p {ว่าง}

ช่องว่างหรือแท็บ: [\ t]

11 \ p {XDigit}

เลขฐานสิบหก: [0-9a-fA-F]

12 \ p {Space}

อักขระเว้นวรรค: [\ t \ n \ x0B \ f \ r]

ต่อไปนี้เป็นตัวอย่างต่างๆของคลาสอักขระ JAVA ที่ตรงกันโดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 \ p {javaLowerCase}

เทียบเท่ากับ java.lang.Character.isLowerCase ()

2 \ p {javaUpperCase}

เทียบเท่ากับ java.lang.Character.isUpperCase ()

3 \ p {javaWhitespace}

เทียบเท่ากับ java.lang.Character.isWhitespace ()

4 \ p {javaMirrored}

เทียบเท่ากับ java.lang.Character.isMirrored ()

ต่อไปนี้เป็นตัวอย่างต่างๆของคลาสอักขระ Unicode ที่ตรงกันโดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 \ p {อิสลาติน}

อักขระในสคริปต์ละติน

2 \ p {InGreek}

อักขระในบล็อกกรีก

3 \ p {Lu}

อักษรตัวพิมพ์ใหญ่

4 \ p {IsAlphabetic}

อักขระตามตัวอักษร (คุณสมบัติไบนารี)

5 \ p {Sc}

สัญลักษณ์สกุลเงิน

6 \ P {InGreek}

อักขระใด ๆ ยกเว้นตัวเดียวในบล็อกภาษากรีก

7 [\ p {L} && [^ \ p {Lu}]]

ตัวอักษรใด ๆ ยกเว้นอักษรตัวพิมพ์ใหญ่

ต่อไปนี้เป็นตัวอย่างต่างๆของ Boundary Matchers ที่ใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 ^

จุดเริ่มต้นของบรรทัด

2 $

จุดสิ้นสุดของบรรทัด

3 \ b

ขอบเขตของคำ

4 \ B

ขอบเขตที่ไม่ใช่คำ

5 \ ก

จุดเริ่มต้นของอินพุต

6 \ G

สิ้นสุดการแข่งขันก่อนหน้านี้

7 \ Z

จุดสิ้นสุดของอินพุต แต่สำหรับเทอร์มิเนเตอร์สุดท้ายถ้ามี

8 \ z

จุดสิ้นสุดของอินพุต

ตัวระบุค่าโลภระบุให้เครื่องมือค้นหาค้นหาสตริงทั้งหมดและตรวจสอบว่าตรงกับ regexp ที่กำหนดหรือไม่ ต่อไปนี้เป็นตัวอย่างต่างๆของ Greedy Quantifiers โดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 เอ็กซ์?

X ครั้งเดียวหรือไม่ก็ได้

2 X *

X, ศูนย์หรือมากกว่าครั้ง

3 X +

X หนึ่งครั้งหรือมากกว่านั้น

4 X {n}

X, n ครั้งพอดี

5 X {n,}

X อย่างน้อย n ครั้ง

6 X {n, m}

X อย่างน้อย n แต่ไม่เกิน m ครั้ง

ตัวระบุจำนวนที่ไม่เต็มใจระบุว่าเครื่องมือค้นหาเริ่มต้นด้วยสตริงที่สั้นที่สุดเท่าที่จะเป็นไปได้ เมื่อพบการแข่งขันแล้วเครื่องยนต์จะดำเนินการต่อ มิฉะนั้นจะเพิ่มอักขระหนึ่งตัวในส่วนของสตริงที่กำลังตรวจสอบและค้นหาและอื่น ๆ กระบวนการนี้จะดำเนินต่อไปจนกว่าจะพบว่าตรงกันหรือใช้สตริงทั้งหมดหมดแล้ว ต่อไปนี้เป็นตัวอย่างต่างๆของ Reluctant Quantifiers โดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 X ??

X ครั้งเดียวหรือไม่ก็ได้

2 X *?

X, ศูนย์หรือมากกว่าครั้ง

3 X +?

X หนึ่งครั้งหรือมากกว่านั้น

4 X {n}?

X, n ครั้งพอดี

5 X {n,}?

X อย่างน้อย n ครั้ง

6 X {n, m}?

X อย่างน้อย n แต่ไม่เกิน m ครั้ง

ตัวบ่งชี้ความเป็นเจ้าของคล้ายกับตัวระบุปริมาณโลภ มันบ่งบอกว่าเครื่องยนต์เริ่มทำงานโดยการตรวจสอบสตริงทั้งหมดมันจะแตกต่างกันในแง่ที่มันใช้ไม่ได้ถ้าการจับคู่ล้มเหลวและไม่มีการมองย้อนกลับ ต่อไปนี้เป็นตัวอย่างต่างๆของ Possessive Quantifiers โดยใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 X? +

X ครั้งเดียวหรือไม่ก็ได้

2 X * +

X, ศูนย์หรือมากกว่าครั้ง

3 X ++

X หนึ่งครั้งหรือมากกว่านั้น

4 X {n} +

X, n ครั้งพอดี

5 X {n,} +

X อย่างน้อย n ครั้ง

6 X {n, m} +

X อย่างน้อย n แต่ไม่เกิน m ครั้ง

ต่อไปนี้เป็นตัวอย่างต่างๆของ Logical Operators ที่ใช้นิพจน์ทั่วไปใน java

ซีเนียร์ No สร้างและจับคู่
1 XY

X ตามด้วย Y.

2 X | Y

X หรือ Y

พิมพ์