首先說下為什么要轉義。在正則中有些字符有特殊含義的,
比方說
* 可以前一個子表達式的任意次
. 表示除“\r\n”之外的任何單個字符
+ 表示前一子表達式的一次或多次
等。
而在有些情況下,需要正則驗證這些字符,比方說要驗證加減乘除四個運算符號,為了告訴編譯器,你要驗證的是一個字符而不是正則表達式,就要對這些有特殊含義的字符進行轉義,這樣就有了轉義這一操作。
在java 和javascipt中,都是用反斜杠“\”進行轉義,然后兩種語言的用法不盡相同,下面舉例說明:
1. Java中轉義字符的使用
java 中正則 一個反斜杠要用兩個反斜杠表示,例如"\\"表示一個反斜杠"\",第一個反斜杠為轉義,第二個為反斜杠本身。下面看個例子:
Pattern pattern=Pattern.compile("\\."); System.out.println(pattern); //輸出 /.
這個要驗證的是點.本身
所以要驗證一個反斜杠,需要四個反斜杠\\\\
Pattern pattern=Pattern.compile("\\\\"); System.out.println(pattern); // 輸出 \\
驗證一個反斜杠字符:
Pattern pattern=Pattern.compile("[\\\\]"); System.out.println(pattern);//輸出[\\] 表示要驗證反斜杠本身 String a="\\"; System.out.println("a="+a);//輸出a=\,表示 一個反斜杠字符 Matcher matcher=pattern.matcher(a); System.err.println(matcher.matches());//輸出 true,驗證通過
驗證任意次數1
Pattern pattern=Pattern.compile("^1*$");//驗證任意次數1 System.out.println(pattern);//輸出^[-+*/]$ String a="1111"; System.out.println("a="+a);//輸出a=1111 Matcher matcher=pattern.matcher(a); System.err.println(matcher.matches());//輸出 true,驗證通過驗證通過
驗證"1*"字符串
Pattern pattern=Pattern.compile("^1\\*$");//驗證任意次數1 System.out.println(pattern);//輸出^1\*$ String a="1*"; System.out.println("a="+a);//輸出a=1* Matcher matcher=pattern.matcher(a); System.err.println(matcher.matches());//輸出 true,驗證通過
驗證+-*/
減號放第一位,不需要轉義
Pattern pattern=Pattern.compile("^[-+*/]$");// System.out.println(pattern);//輸出^[-+*/]$ String a="/"; System.out.println("a="+a);//輸出a=-,表示 一減號字符 Matcher matcher=pattern.matcher(a); System.err.println(matcher.matches());//輸出 true,驗證通過
減號不在第一位,需要轉義,原因:正則表達式中[0-9] 表示0到9任意字符
Pattern pattern=Pattern.compile("^[+\\-*/]$");// System.out.println(pattern);//輸出^[+\-*/]$ String a="-"; System.out.println("a="+a);//輸出a=-,表示 一減號字符 Matcher matcher=pattern.matcher(a); System.err.println(matcher.matches());//輸出 true,驗證通過
2. js 中的正則轉義
直接用一個反斜杠即可完成轉義
var str=/^\\$/; //驗證一個反斜杠 var testStr='\\'; console.log(str.test(testStr))//輸出true
驗證+-*/
var str=/^[+\-*/]$/; //驗證+-*/ var testStr='-'; console.log(str.test(testStr))//輸出true