正则表达式常用的语法:
A:字符
x 字符 x :任意的字符
\ 反斜线字符 在代码中书写正则表达式:——>用两个\代表一个反斜线
\t 制表符 (‘\u0009’)
\n 新行(换行)符 (‘\u000A’) IO流中要写入换行符号:windows “\r\n”
\r 回车符 (‘\u000D’)
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) :当前字母大小均可
C:预定义字符类
. 任何字符 邮箱里面:如果本身就是.,那么在写正在表达式的时候,\.将当前.转义
\d 数字:[0-9] \d在正则表达式应用的时候:[0-9]--->\\d
\w 单词字符:[a-zA-Z_0-9]:简单一些字符串,单词字符(规则:数字或者字母)
javascript:[a-zA-Z0-9]
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界 :
E:Greedy 数量词
X? X元素出现一次或一次也没有出现
X* X元素出现零次或多次
X+ X元素出现一次或多次
X{n} X,恰好产生n 次
X{n,} X,至少产生 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
正则表达式的应用,我们可以把字符串的判断用正则表达式来的替换之前的if判断句,然后减少代码量和代码冗余度。
例:判断一个QQ号的长度是否符合长度为5到10位,且首位不能为0的一个规则。
代码简写
//符合长度在5到10位之间
if(qq.length()>=5 && qq.length()<=10){
//符合第一个规则还要符合不能以0开头
if(!qq.startsWith("0")){
//这些QQ号码必须还数字的
//可以先将qq,转换成字符数字
char[] chs = qq.toCharArray() ;
//遍历字符数组,获取每一个字符
for(int x = 0 ; x < chs.length ; x ++){
char ch = chs[x] ;
//获取到每一个字符,判断该字符是否是数字
if(!Character.isDigit(ch)){
flag = false ;
break ;
}
我们用正则表达式的话,如下所示
/*//定义正则规则
//首位数字为1到9,后4位到后9位的数字为0到9
String regex = "[1-9][0-9]{4,9}" ;
判断正则表达式
//public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。
boolean flag = qq.matches(regex) ;
return flag ;*/
正则表达式的简写
String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z]{2,3})+" ;
String regex = "\\w+@\\w{2,6}(\\.[a-zA-Z]{2,3})+" ;
由此看,正则表达式减少的代码量
String类的特有功能
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串,返回值类型是一个字符串数组类型
public String replaceAll(String regex,String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
package day13_ZZbiaoda;
import javax.print.DocFlavor.STRING;
/**
* @author Aoman_Hao
*/
public class Regex_Demo {
public static void main (String[] args){
String AA = "I thought RNG will win but it had lost!";
String blank_regex = " ";
//语法:public String[] split(String regex) 切割
String[] word = AA.split(blank_regex);
//循环输出
for (int i = 0; i < word.length; i++)
System.out.println(word[i]);
System.out.println("----------------------------");
String BB = "qwer1234qwer456";
String num_regex = "\\d";//0到9的简写
//语法:public String replaceAll(String regex,String replacement) 替换
String BB_replace = BB.replaceAll(num_regex, "+");
System.out.println("修改后:"+BB_replace);
}
}
输出:
I
thought
RNG
will
win
but
it
had
lost!
----------------------------
修改后:qwer++++qwer+++
public static Pattern compile(String regex)将给定的正则表达式编译成一个模式对象
public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。 regex是自己定的正则表达式,使用方法:对象.matchs(regex)
package day13_ZZbiaoda;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Aoman_Hao
*/
public class Regex_Demo2 {
public static void main(String[] args) {
//获得模式对象
Pattern regex = Pattern.compile("we*");
//获取匹配器对象,返回boolean类型数据
Matcher m = regex.matcher("weeeeeeeeee");
boolean flag = m.matches();
System.out.println("flag:"+flag);
////////////////////////////////////
String regex1 = "we*";//正则规则
String name = "weeeeee";//指定字符串
//调用matcher方法,返回boolean类型值
boolean flag2 = name.matches(regex1);
System.out.println("flag2:"+flag2);
}
}
输出:
flag:true
flag2:true