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

Regular Expression \E Metacharacter ใน Java

Metacharacter \E จบ quoting ที่เริ่มด้วย \Q ทุกตัวอักษรระหว่าง \Q และ \E จะถูกถือเป็น literal characters (metacharacters สูญเสียความหมายพิเศษ)

ตัวอย่าง 1: โดยไม่ใช้ \Q...\E

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

public class SampleProgram {
    public static void main(String args[]) {
        String regex = "[aeiou]";
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input string: ");
        String input = sc.nextLine();
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        if (matcher.find()) {
            System.out.println("Match occurred");
        } else {
            System.out.println("Match not occurred");
        }
    }
}

ผลลัพธ์

Enter input string: sample
Match occurred

ตัวอย่าง 2: ใช้ \Q...\E

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

public class SampleProgram {
    public static void main(String args[]) {
        String regex = "\\Q[aeiou]\\E";
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input string: ");
        String input = sc.nextLine();
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        if (matcher.find()) {
            System.out.println("Match occurred");
        } else {
            System.out.println("Match not occurred");
        }
    }
}

ผลลัพธ์

Enter input string: sample
Match not occurred

Enter input string: The letters [aeiou] are vowels in English alphabet
Match occurred

อธิบาย

  • [aeiou] = character class จับคู่สระ a, e, i, o, u
  • \Q[aeiou]\E = จับคู่สตริง literal "[aeiou]" ทุกตัวอักษร
  • ใน Java string literal: "\\Q[aeiou]\\E" (escape backslash)
  • ใน regex จริง: \Q[aeiou]\E

การใช้งาน

  • ค้นหาสตริงที่มี metacharacters: \Q.*+?^${}()|[]\\\E
  • สร้าง regex จาก user input อย่างปลอดภัย: Pattern.compile("\\Q" + userInput + "\\E")
  • Pattern.quote(String) ทำอย่างเดียวกันอัตโนมัติ (แนะนำ)

ตัวอย่าง Pattern.quote()


String userInput = "[aeiou]";
String regex = Pattern.quote(userInput); // คืนค่า \Q[aeiou]\E
Pattern pattern = Pattern.compile(regex);
matcher = pattern.matcher("The letters [aeiou] are vowels");
// Match occurred

ข้อควรระวัง

  • \E ต้องมี \Q นำหน้า มิฉะนั้นจะ error
  • ไม่สามารถ nest \Q...\E ได้
  • หาก user input มี \E เอง จะจบ quoting ก่อนเวลา → ใช้ Pattern.quote() ปลอดภัยกว่า