Java和JS正则表达式代码,判断是否为空白字符,学习笔记PPT元字符,转义字符-诗书画唱
编写一个java程序,输入一个字符串,进行如下的正则表达式验证:
1、输入的数字为5时,程序打印出true。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T1 {
public static void main(String[] args) {
System.out.println("请输入一个数字");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
String old = "5";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
}
}


2、输入的字符串是bo,boo,booo...打印出true。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T2 {
public static void main(String[] args) {
while(true){
System.out.println("请输入bo,boo,booo...之类的字符串");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//.可以替换任意的除了\n(换行符)以外的任意字符。
//*表示字符出现的次数是任意多次
String old = "^boo*";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
}}}



3、输入的字符串是k,ko,koo,kooo...打印出true。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T3 {
public static void main(String[] args) {
while(true){
System.out.println("请输入k,ko,koo,kooo...之类的字符串");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//.可以替换任意的除了\n(换行符)以外的任意字符。
//*表示字符出现的次数是任意多次
String old = "^ko*";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}



4、输入的字符串是p,po时打印出true

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T4 {
public static void main(String[] args) {
while(true){
System.out.println("请输入p或po的字符串");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0
String old = "^po?";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}


5、输入的字符串以ba开头时,打印出true。例如:输入banana会打印true,但是输入unba会打印false。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T5 {
public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串以ba开头时,打印出true。"
+ "\n例如:输入banana会打印true,"
+ "\n但是输入unba会打印false。");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0
//.可以替换任意的除了\n(换行符)以外的任意字符
//*表示字符出现的次数是任意多次
String old = "^ba.*";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}

自己的发现的规律和理解总结记录:



6、输入的字符串以er结尾时,打印出true。worker,erlly

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T6 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串以er结尾时,打印出true");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0
//.可以替换任意的除了\n(换行符)以外的任意字符
//*表示字符出现的次数是任意多次
//$表示输入的字符串必须以什么结尾
String old = ".*er$";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}


7、固定电话号码验证:0731-8xxxxxxx
区号必须是一个四位数字
区号和电话号码之间必须使用-连接
电话号码是一个8位数字
长沙的号码首位都是8开头


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T7 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串"
+ "固定电话号码验证是否为0731-8xxxxxxx类型。\n"
+ "区号必须是一个四位数字\n"
+ "区号和电话号码之间必须使用-连接\n"
+ "电话号码是一个8位数字\n"
+ "长沙的号码首位都是8开头");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0。
//.可以替换任意的除了\n(换行符)以外的任意字符。
//*表示字符出现的次数是任意多次。
//$表示输入的字符串必须以什么结尾。
//\d表示匹配任意数字字符,相当于“[0-9]”。
//"{}"表示匹配前一个字符或子表达式n次。
//个人的理解:
//在字符串中表示\本身必须使用转移符号\,比如用\d等时要用成\\d
//“\\”表示被“\”这个转义字符转义后的“\”,代表是纯“\”
//而非字符串“\”。
String old = "^\\d{4}-{1}8\\d{7}";
//String old = "\\d{4}";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("符合xxxx-8xxxxxxx类型要求!");
}
else{
System.out.println("不符合xxxx-8xxxxxxx类型要求!");
}
}}}




8、手机号码验证:
首位必须是1,第二位只能是3,4,5,6,7,8,9,0,后面跟9位数字。


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T8 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串\n"
+ "首位必须是1,\n"
+ "第二位只能是3,4,5,6,7,8,9,0,\n"
+ "后面跟9位数字。");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0。
//.可以替换任意的除了\n(换行符)以外的任意字符。
//*表示字符出现的次数是任意多次。
//$表示输入的字符串必须以什么结尾。
//\d表示匹配任意数字字符,相当于“[0-9]”。
//"{}"表示匹配前一个字符或子表达式n次。
//个人的理解:
//在字符串中表示\本身必须使用转移符号\,比如用\d等时要用成\\d
//“\\”表示被“\”这个转义字符转义后的“\”,代表是纯“\”
//而非字符串“\”。
//输入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//个人的理解和总结:"|"表示"或者"
String old = "^1(0|[3-9])\\d{9}";
//String old = "\\d{4}";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("符合要求!");
}
else{
System.out.println("不符合要求!");
}
}}}


依次控制单一变量地验正自己写的正则表达式是否正确等:

9、输入的字符串是一个合法的变量名。


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T9 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串是一个合法的变量名");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0。
//.可以替换任意的除了\n(换行符)以外的任意字符。
//*表示字符出现的次数是任意多次。
//$表示输入的字符串必须以什么结尾。
//\d表示匹配任意数字字符,相当于“[0-9]”。
//"{}"表示匹配前一个字符或子表达式n次。
//个人的理解:
//在字符串中表示\本身必须使用转移符号\,比如用\d等时要用成\\d
//“\\”表示被“\”这个转义字符转义后的“\”,代表是纯“\”
//而非字符串“\”。
//输入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//个人的理解和总结:"|"表示"或者"。
//在JS中可以写成var reg=/^[a-zA-Z\$_][a-zA-Z\d_]*$/;
//但是Java中要用上"\"转义字符,而且不必用“/”括起来
//个人的理解:\\$用了两次的转义,第一次时第一个“\”把
//第二个“\”转义为纯的字符串“\”,
//之后纯的字符串“\”把$转义为纯的字符串“$”
String old = "^[a-z|A-Z|\\$|_][a-z|A-Z|\\d|_]*$";
//或简写成String old = "^[a-zA-Z\\$_][a-zA-Z\\d_]*$";
//具体直观和简写的写法我都尝试过,效果都一样。
//"|"表示"或者"
//String old = "\\d{4}";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("是一个合法的变量名!");
}
else{
System.out.println("不是一个合法的变量名!");
}
}}}



10、尝试写出邮箱验证的正则表达式。
要求一:必须包含一个@和.
要求二:@必须在.前面
要求三:@前面必须要有字母数字下划线
要求四:@和.之间需要有字母数字下划线
要求五:.后面必须跟上com或者net,cn
rr@163.com

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T10 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串是一个邮箱!\n"
+ "要求一:必须包含一个@和.\n"
+ "要求二:@必须在.前面\n"
+ "要求三:@前面必须要有字母数字下划线\n"
+ "要求四:@和.之间需要有字母数字下划线\n"
+ "要求五:.后面必须跟上com或者net,cn\n");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0。
//.可以替换任意的除了\n(换行符)以外的任意字符。
//*表示字符出现的次数是任意多次。
//$表示输入的字符串必须以什么结尾。
//\d表示匹配任意数字字符,相当于“[0-9]”。
//"{n}"表示匹配前一个字符或子表达式n次。
//"{n,}"表示匹配前一个字符或子表达式n次以上。
//个人的理解:
//在字符串中表示\本身必须使用转移符号\,比如用\d等时要用成\\d
//“\\”表示被“\”这个转义字符转义后的“\”,代表是纯“\”
//而非字符串“\”。
//输入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//个人的理解和总结:"|"表示"或者"。
//在JS中可以写成var reg=/^[a-zA-Z\$_][a-zA-Z\d_]*$/;
//但是Java中要用上"\"转义字符,而且不必用“/”括起来
//个人的理解:\\$用了两次的转义,第一次时第一个“\”把
//第二个“\”转义为纯的字符串“\”,
//之后纯的字符串“\”把$转义为纯的字符串“$”,\\.也同理
String old = "[a-zA-Z\\d_]{1,}@[a-zA-Z\\d_]{1,}"
+ "\\.*(com|net|cn)$";
//或简写成String old = "^[a-zA-Z\\$_][a-zA-Z\\d_]*$";
//具体直观和简写的写法我都尝试过,效果都一样。
//"|"表示"或者"。
//输入的字符串必须是5个以上的h
// String reg12 = "h{5,}";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("是一个邮箱!");
}
else{
System.out.println("不是一个邮箱!");
}
}}}




11、输入的是空白字符,例如空格\s,换行\n、制表符时\t,打印出true。(两种方法)
自己想出的方法一:


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T11 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串是空白字符,\n"
+ "例如空格\\s,换行\\n、\n"
+ "制表符时\\t,打印出true。\n"
+ "\\f——表示换页符\n"
+ "\\r——表示回车符\n"
+ "\\n——表示换行符\n"
+ "\\t——水平制表符\n"
+ "\\v——垂直制表符");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0。
//.可以替换任意的除了\n(换行符)以外的任意字符。
//*表示字符出现的次数是任意多次。
//$表示输入的字符串必须以什么结尾。
//\d表示匹配任意数字字符,相当于“[0-9]”。
//"{n}"表示匹配前一个字符或子表达式n次。
//"{n,}"表示匹配前一个字符或子表达式n次以上。
//个人的理解:
//在字符串中表示\本身必须使用转移符号\,比如用\d等时要用成\\d
//“\\”表示被“\”这个转义字符转义后的“\”,代表是纯“\”
//而非字符串“\”。
//输入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//个人的理解和总结:"|"表示"或者"。
//在JS中可以写成var reg=/^[a-zA-Z\$_][a-zA-Z\d_]*$/;
//但是Java中要用上"\"转义字符,而且不必用“/”括起来
//个人的理解:\\$用了两次的转义,第一次时第一个“\”把
//第二个“\”转义为纯的字符串“\”,
//之后纯的字符串“\”把$转义为纯的字符串“$”,\\.也同理
String old = "(\\\\s|\\\\n|\\\\t|\\\\f|\\\\v|\\\\r)";
//或简写成String old = "^[a-zA-Z\\$_][a-zA-Z\\d_]*$";
//具体直观和简写的写法我都尝试过,效果都一样。
//"|"表示"或者"。
//输入的字符串必须是5个以上的h
// String reg12 = "h{5,}";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("是空白字符!");
}
else{
System.out.println("不是空白字符!");
}
}}}



自己想出的方法二:

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T11 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串是空白字符,\n"
+ "例如空格\\s,换行\\n、\n"
+ "制表符时\\t,打印出true。\n"
+ "\\f——表示换页符\n"
+ "\\r——表示回车符\n"
+ "\\n——表示换行符\n"
+ "\\t——水平制表符\n"
+ "\\v——垂直制表符");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
//注释,下面的内容等是自己总结的相关知识(有助与记忆,理解等):
//^表示输入的字符串必须以什么开头。
//?表示字符出现的次数是1或者0。
//.可以替换任意的除了\n(换行符)以外的任意字符。
//*表示字符出现的次数是任意多次。
//$表示输入的字符串必须以什么结尾。
//\d表示匹配任意数字字符,相当于“[0-9]”。
//"{n}"表示匹配前一个字符或子表达式n次。
//"{n,}"表示匹配前一个字符或子表达式n次以上。
//个人的理解:
//在字符串中表示\本身必须使用转移符号\,比如用\d等时要用成\\d
//“\\”表示被“\”这个转义字符转义后的“\”,代表是纯“\”
//而非字符串“\”。
//输入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//个人的理解和总结:"|"表示"或者"。
//在JS中可以写成var reg=/^[a-zA-Z\$_][a-zA-Z\d_]*$/;
//但是Java中要用上"\"转义字符,而且不必用“/”括起来
//个人的理解:\\$用了两次的转义,第一次时第一个“\”把
//第二个“\”转义为纯的字符串“\”,
//之后纯的字符串“\”把$转义为纯的字符串“$”,\\.也同理
//方法一:
//String old = "(\\\\s|\\\\n|\\\\t|\\\\f|\\\\v|\\\\r)";
//方法二:
String old = "^\\\\[s|n|t|f|v|r]";
//方法三:
//String old = "\\\\[s|n|t|f|v|r]";
//或简写成String old = "^[a-zA-Z\\$_][a-zA-Z\\d_]*$";
//具体直观和简写的写法我都尝试过,效果都一样。
//"|"表示"或者"。
//输入的字符串必须是5个以上的h
// String reg12 = "h{5,}";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);
if(B==true){
System.out.println("是空白字符!");
}
else{
System.out.println("不是空白字符!");
}
}}}



12、输入的不是空白字符时,打印出true。


package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T12 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串不是空白字符,\n"
+ "例如空格\\s,换行\\n、\n"
+ "制表符时\\t,打印出true。\n"
+ "\\f——表示换页符\n"
+ "\\r——表示回车符\n"
+ "\\n——表示换行符\n"
+ "\\t——水平制表符\n"
+ "\\v——垂直制表符");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
String old = "\\\\[s|n|t|f|v|r]";
Boolean B = Pattern.matches(old, Scanner);
if(B==true){
B=false;}
else{B=true;}
System.out.println(B);
}}}


13、输入的字符串中包含连续的两个p时,打印出true。(apple,pplv,app)

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T13 {public static void main(String[] args) {
while(true){
System.out.println("请输入的字符串中包含连续的两个p时,\n"
+ "打印出true。(apple,pplv,app)");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
String old = ".{0,}p{2}.{0,}";
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}



14、输入的字符串包含连续的五个或五个以上K时,打印出true。

package Z;
import java.util.Scanner;
import java.util.regex.Pattern;
public class T14 {public static void main(String[] args) {
while(true){
System.out.println("输入的字符串包含连续的\n"
+ "五个或五个以上K时,打印出true。");
Scanner s1=new Scanner(System.in);
String Scanner=s1.next();
String old = ".{0,}K{5,}.{0,}";
//用Pattern.matches判断输入的字符串是否符合要求:
Boolean B = Pattern.matches(old, Scanner);
System.out.println(B);}}}


正则表达式PPT:








老师写的代码和笔记等:
package Z;
import java.util.regex.Pattern;
public class Z {
public static void main(String[] args) {
// TODO Auto-generated method stub
//输入一个字符串,a或者""
//String inp = "www.com";
//正则表达式
//?表示字符出现的次数是1或者0
//*表示字符出现的次数是任意多次
//+表示字符出现的次数是1或者多次
//String reg1 = "a+";
//判断输入的字符串是否符合要求
//Boolean r1 = Pattern.matches(reg1, inp);
//System.out.println(r1);
//^表示输入的字符串必须以什么开头
//.可以替换任意的除了\n(换行符)以外的任意字符
//String reg2 = "^pub.*";
//Boolean r2 = Pattern.matches(reg2, inp);
//System.out.println(r2);
//$表示输入的字符串必须以什么结尾
//String reg3 = ".*com$";
//Boolean r3 = Pattern.matches(reg3, inp);
//System.out.println(r3);
//输入的字符串要么是com,要么是net,要么是top
//String reg4 = "(com|net|top)";
//Boolean r4 = Pattern.matches(reg4, inp);
//System.out.println(r4);
//输入的字符串必须以www开头,必须以com或者net结尾,
//中间可以是任意多个字符
//String reg5 = "^www.*(com|net)$";
//Boolean r5 = Pattern.matches(reg5, inp);
//System.out.println(r5);
//输入的字符串必须全部是字母
//String reg6 = "[a-zA-Z]+";
//Boolean r6 = Pattern.matches(reg6, "Apple");
//System.out.println(r6);
//输入的字符串必须全部是数字
//String reg7 = "[0-9]+";
//也可以使用元字符来表示
//在字符串中表示\本身必须使用转移符号\
// String reg7 = "\\d+";
// Boolean r7 = Pattern.matches(reg7, "419.1");
// System.out.println(r7);
//输入的字符串必须是数字字母
//String reg8 = "[0-9a-zA-Z]";
//\w表示数字字母下划线
//变量名必须以数字,字母,下划线中的组成,不能以数字开头
//String reg9 = "^[a-zA-Z_]\\w*";
//Boolean r9 = Pattern.matches(reg9, "_user");
//System.out.println(r9);
//输入的字符串必须是四个连续的a
//String reg10 = "a{4}";
//Boolean r10 = Pattern.matches(reg10, "aaaa");
//System.out.println(r10);
//输入的字符串必须是3到7个c
//String reg11 = "c{3,7}";
//Boolean r11 = Pattern.matches(reg11, "cccc");
//System.out.println(r11);
//输入的字符串必须是5个以上的h
String reg12 = "h{5,}";
//输入的必须是一个手机号码,必须以1开头,是11位数字
String reg13 = "^1\\d{10}";
//输入的字符串必须是一个0.xx的两位小数
String reg14 = "^0\\.\\d{2}";
Boolean r14 = Pattern.matches(reg14, "0.31");
System.out.println(r14);
//输入的字符串必须以除了a以外的任何字符开头
String reg15 = "^[^a][a-z]*";
}
}
学习笔记:
正则表达式
JS和JAVA等多种语言中都可以使用正则表达式,而且语法规则都一样。
正则表达式中的特殊字符:
?:表示出现的次数是1或者0
+:出现的次数不能为0
*:可以出现任意多次
^:以什么开头
$:以什么结尾
.:表示换行符\n以外的任何字符
正则表达式中的元字符:
所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,其使得正则表达式具有强大的文字处理能力。
基本元字符:
"." ——表示匹配除换行符和回车符外的任意单个字符
"|" ——表示逻辑“或”
"[]" ——表示匹配字符集合中的一个字符
"[^]"——表示匹配不在字符集合中的一个字符,即对集合取非
"-"——表示定义一个区间,如a-z即代表小写字母a-z
"()"——表示生成子表达式
"\"——表示对下一个字符进行转义,转义即理解为取消其特殊含义
特殊元字符
\d——匹配任意数字字符,相当于“[0-9]”
\D——“\d”的反义,匹配任意非数字字符,相当于“[^0-9]”
\w——匹配任一字母、数字、下划线,在 Unicode 编码中也可匹配汉字、俄文等字符
\W——“\w”的反义,包括空白字符、标点等
\s——匹配一个空白字符,包括空格、水平制表符、换行符、回车符等
\S——“\s”的反义,匹配任意非空白字符
数量元字符
"*"——匹配前一个字符或子表达式任意次重复,可以匹配零次
"+"——匹配前一个字符或子表达式一次或多次重复,与"*"的唯一区别在于不能匹配零次
"?"——匹配前一个字符或子表达式零次或一次
"{}"——匹配前一个字符或子表达式n次
"{m,n}"——匹配前一个字符或子表达式至少m次至多n次
"{n,}"——匹配前一个字符n次或更多次
空白元字符
\f——表示换页符
\r——表示回车符
\n——表示换行符
\t——水平制表符
\v——垂直制表符
好文链接:


http://mp.weixin.qq.com/s?__biz=MzIyOTU3NjM3NA==&mid=2247483950&idx=1&sn=82d0c853405386ce8930cfdec2a1c3c3&chksm=e841d9f7df3650e1acfb71639c22701d3c2a860f818d0310907aa618b97b7b6ef85ea6879bc8&scene=21#wechat_redirect

https://www.runoob.com/regexp/regexp-metachar.html
正则表达式大全:
字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。
^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
{n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
{n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
. 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“[.\n]”的模式。
(pattern) 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。
(?:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern) 正向预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
[xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
\B 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
\cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
\d 匹配一个数字字符。等价于[0-9]。
\D 匹配一个非数字字符。等价于[^0-9]。
\f 匹配一个换页符。等价于\x0c和\cL。
\n 匹配一个换行符。等价于\x0a和\cJ。
\r 匹配一个回车符。等价于\x0d和\cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。
\S 匹配任何非空白字符。等价于[^\f\n\r\t\v]。
\t 匹配一个制表符。等价于\x09和\cI。
\v 匹配一个垂直制表符。等价于\x0b和\cK。
\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
\xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。.
\num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
\nml 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
\un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。