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 |