说明正则表达式中转义字符的Java程序
dot(.)、hash(#)等对正则表达式有特殊意义的特殊字符需要转义才能在正则表达式中匹配。例如,如果 dot(.) 在正则表达式中没有转义,它会匹配任何单个字符,从而给出不明确的结果。
方法:
在Java Regex 中可以通过两种方式对字符进行转义,下面列出了我们将深入讨论的两种方式:
- 使用 \Q 和 \E 进行转义
- 使用反斜杠(\\) 进行转义
方法 1:使用 \Q 和 \E 进行转义
- 我们可以使用 \Q 和 \E 转义序列来转义字符。
- \Q 标记转义序列的开始,而 \E 标记转义序列的结束。
- \Q 和 \E 之间的任何字符被转义。
- 一般用于转义多个字符。
执行:
在下面的源代码中,正则表达式模式 p 被转义为 dot(.)运算符,而模式 p1 没有被转义为 dot(.)。因此,模式 p 仅与字符串s 匹配,而模式 p1 与字符串s 和 s1 均匹配。
例子
Java
// Java Program to Illustrate Escaping Characters in Java
// Regex Using \Q and \E for escaping
// Importing required classes
import java.io.*;
import java.util.regex.*;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Sample strings as inputs
String s = "Geeks.forGeeks";
String s1 = "GeeksforGeeks";
// Creating object of Pattern class
// 1. Patterns with dot escaped
Pattern p = Pattern.compile("\\Q.\\E");
// 2, Pattern without dot escaped
Pattern p1 = Pattern.compile(".");
// Mathcers for each pattern string combination
Matcher m = p.matcher(s);
Matcher m1 = p.matcher(s1);
Matcher m2 = p1.matcher(s);
Matcher m3 = p1.matcher(s1);
// Print and display whether p,p1 matches
// or not via boolean true false
System.out.println("p matches s: " + m.find());
System.out.println("p matches s1: " + m1.find());
System.out.println("p1 matches s: " + m2.find());
System.out.println("p1 matches s1: " + m3.find());
}
}
Java
/*package whatever //do not write package name here */
import java.io.*;
import java.util.regex.*;
class GFG {
public static void main (String[] args) {
String s="Geeks.forGeeks";//sample strings
String s1="GeeksforGeeks";
//patterns with dot escaped
Pattern p=Pattern.compile("\\.");
// pattern without dot escaped
Pattern p1=Pattern.compile(".");
//matchers for each pattern string combination
Matcher m=p.matcher(s);
Matcher m1=p.matcher(s1);
Matcher m2=p1.matcher(s);
Matcher m3=p1.matcher(s1);
//outputs
System.out.println("p matches s: "+m.find());
System.out.println("p matches s1: "+m1.find());
System.out.println("p1 matches s: "+m2.find());
System.out.println("p1 matches s1: "+m3.find());
}
}
输出
p matches s: true
p matches s1: false
p1 matches s: true
p1 matches s1: true
方法 2:使用反斜杠 (\\) 进行转义
- 我们可以使用反斜杠来转义字符。
- 我们需要两个反斜杠,因为反斜杠本身就是一个字符,需要进行转义。
- \\ 之后的字符被转义。
- 它通常用于对字符串末尾的字符进行转义。
执行:
在下面的源代码中,正则表达式模式p为 dot( . )运算符进行了转义,而模式p1没有为 dot( . ) 进行转义。因此,模式p仅与字符串s匹配,而模式p1与字符串s和s1均匹配。
例子
Java
/*package whatever //do not write package name here */
import java.io.*;
import java.util.regex.*;
class GFG {
public static void main (String[] args) {
String s="Geeks.forGeeks";//sample strings
String s1="GeeksforGeeks";
//patterns with dot escaped
Pattern p=Pattern.compile("\\.");
// pattern without dot escaped
Pattern p1=Pattern.compile(".");
//matchers for each pattern string combination
Matcher m=p.matcher(s);
Matcher m1=p.matcher(s1);
Matcher m2=p1.matcher(s);
Matcher m3=p1.matcher(s1);
//outputs
System.out.println("p matches s: "+m.find());
System.out.println("p matches s1: "+m1.find());
System.out.println("p1 matches s: "+m2.find());
System.out.println("p1 matches s1: "+m3.find());
}
}
输出:
p matches s: true
p matches s1: false
p1 matches s: true
p1 matches s1: true