正则表达式
正则表达式的规则:
A:字符
      x  字符x
      \ 反斜线字符
      \n 换行
      \r 回车
B:字符类
     [abc]    a或b或c
     [^abc]   除了a,b,c以外
     [a-zA-Z] 所有字母
     [0-9]    所有数字
C:预定义字符类
     .  任何字符(需要用到.就要\.)
     \d 等同于[0-9]
     \D 同等与[^0-9]
     \w 单词字符= [a-zA-Z_0-9]
D:边界匹配器
     ^  行的开头
     $  行的结尾
     \b 单词边界(不是单词字符的地方)
            举例:hello world中的空格就是单词边界
E:Greedy 数量词
     x? x,
不写了,自己查去
JAVA方法
public boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式
判断
Scanner sc = new Scanner(System.in);
String email = sc.nextLine();
String regex = "[a-zA-Z_0-9]+![a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";
boolean flag = email.matcher(refex);
System,out.println("flag:"+flag);
分割
public string[] split(string regex)//
                 根据匹配给定的正则表达式来拆分此字符串
                *此方法返回的数组包含此字符串的每个子字符串,
    使用举例:
             String s1 = “aa.bb.cc”;
             String[] s1Array = s1.split(“\.”);
String s1 = "aa   bb       cc";
String[] s1Array = s1.split(" +");
String s1 = "C:\\Users\\王旭\\Desktop\\JAVA笔记\\12.正则表达式";
String[] s1Array = s1.split("\\\\");
*注意*:硬盘上的地址必须用\而不是一个\,所以此处用\\切割
注意:
   1.”.”和“|”都是转义字符,必须得加”\“; 
     String.split(“\.”),这样才能正确的分隔开,不能用String.split(“.”);
     String.split(“\|”),这样才能正确的分隔开,不能用String.split(“|”);
   2.如果在一个字符串中有多个分隔符,可以用“|”作为连字符
排序
如果将一个字符串元素排序呢?
1.把字符串进行分割,得到一个字符串数组。
2.把字符串数组变换成int数组。
3.排序
4.将int数组组装成一个字符串
1  | String s = "6 4 8 1 9";  | 
替换
替换功能:
  String类的replaceAll(String regex,string replacement)
  使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串
    举例:屏蔽掉字符串中的敏感字符
     String s = “+VX123456789”;
     String regex = “\d”;
     String ss = ““;
     String result = s.replaceAll(regex,ss);
     syso(result);
     结果:+vx**
获取
获取:将字符串中的符合规则的子串取出
操作步骤:
1.将正则表达式封装成对象。
2.让正则对象和要操作的字符串相关联。
3.关联后,获取正则匹配引擎。
4.通过引擎对符合规则的子串进行操作,比如取出
Pattern和Matcher类
举例:
    String str = “wow ming tian yao xia yu”;
String regex = "\\b[a-z]{3}\\b";
Pattern p = Pattern.compile(regex);//将规则封装成对象
Matcher m = p.matcher(str);//让正则对象和要作用的字符串相关联,获取匹配器对象
System.out.println("matches:"+m.matcher());//判断是否符合规则
while(m.find())//find将规则作用到字符串上,并进行符合规则的子串查找。
{
   syso(m.group());//group用于获取匹配后的结果。
 }
***注意,此处打印出的只有yao xia两个,而没有wow。
       why?
       因为之前调用了一次matcher()方法进行了一次符合判定,
       matcher()因为接收到空格而判断为false。
       但是匹配器的索引位置却已经过了wow的位置。
       所以这是容易漏掉第一个的易错点