首先说下为什么要转义。在正则中有些字符有特殊含义的,
比方说
* 可以前一个子表达式的任意次
. 表示除“ ”之外的任何单个字符
+ 表示前一子表达式的一次或多次
等。
而在有些情况下,需要正则验证这些字符,比方说要验证加减乘除四个运算符号,为了告诉编译器,你要验证的是一个字符而不是正则表达式,就要对这些有特殊含义的字符进行转义,这样就有了转义这一操作。
在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