java正则表达式


一、什么是“正则表达式”
简单点说就是“符合一定规则的表达式”,是专门儿操作字符串的一个方法,是java.lang.String类中的方法。比方说我给自己定义的字符串规定“字符串必须是1-9里面的数字,只要不符合就不可以!”,所以定义一个String类型的规则,这个规则也就是正则表达式,用英文regex表示,然后需要自己操作的字符串使用String类中的方法matches和自己事先定义好的正则表达式进行比较String s.matches(regex);,如果符合的话,将会返回的是true,否则false。所以自己可以使用判断的方法进行比较,使用“正则表达式”是相当的高效率的一种解决String字符串的方法。

二、正则表达式常用规则

1、字符规则:
x就是一个字符,这个字符并不是x啊,是任意的一个未知字符
\\反斜杠字符,只要自己需要反斜杠的时候,一定要使用双反斜杠
\t水平制表符
\n换行符
\r回车符
\f换页符
\e转义符

2、字符类规则:
[abc]第一个字符是a、b、或者c(简单类)
[^abc]第一个字符是除了abc的任意的一个字符
[a-zA-Z]第一个字符是a到z或者是A到Z,两头的字母都是包括的
[a-d[m-p]]第一个字符是a到d或者是m到p,是这两个范围的并集
[a-z&&[def]]第一个字符是d、e、或者f,属于交集
[a-z&&[^bc]]第一个字符是除了bc的所有小写字母
[a-z&&[^m-p]]第一个字符是a到z但是不是m到p的字母

3、预定义字符类
.   这个符号意思是能是任意的字符(与行结束可能匹配也可能不匹配)
\d数字,任意的数字,[0-9]
\D非数字,只要不是数字就可以[^0-9]
\s空白字符,[\t\n\x0B\f\r]
\S非空白自负,[^\s]
\w单词字符,[a-zA-Z_0-9]
\W非单词字符[^\w]

4、Greedy数量词(贪婪的)
X?第一个字符,一次或者一次也没有
X* 第一个字符,零次或者多次
X+第一个字符,一次或者多次
X{n}第一个字符,恰好n次
X{n,}第一个字符,至少n次
X{n,m}第一个字符,至少n次,但是不能超过m次

5、Reluctant数量词(不情愿的,勉强的)
X??第一个字符,一次或一次也没有
X*?第一个字符,零次或者多次
X+?第一个字符,一次或者多次
X{n}?第一个字符,恰好n次
X{n,}?第一个字符,至少n次
X{n,m}?第一个字符,至少n次,但是不超过m次

6、Possessive(占有欲)数量词
X?+第一个字符,一次或者一次也没有
X*+第一个字符,零次或者多次
X++第一个字符,一次或者多次
X{n}+第一个字符,恰好n次
X{n,}+第一个字符,至少n次
X{n,m}+第一个字符,至少n次,但是不超过m次

7、Logical(逻辑上的)运算符
XY X后面跟上Y
X|Y X或者是Y
(X) X,作为捕获组

三、“叠词”的去除
怎样去除“叠词”?下面是一个例子:
要求:将字符串“我我........我我......我要..........要要........学学学...........学学学................编编编编编编编编编..........程程程程程程程程........”替换成“我要学编程”。
Str = str.replaceAll("\\.+","");  //意思是将前面的所有......都换成空,结果将是“我要学编程”。
str = str.replaceAll("(.)\\1+","$1"); //这里的(.)是引用的前面的“.”结果将是“我要学编程”。

 

四、正则表达式的基本功能
1、匹配(小程式如下:)
要求:手机号码只能在13*********、15*********、18***********之中。

public static void check(){
 String number="15893831710";
 String regex="1[358]\\d{9}";  //意思就是第一个数字必须是1,第二个是3、5或者8,后面全是数字,正好9个。
 boolean b=number.matches(regex);
 System.out.println(b);
}

2、切割(小程式如下:)
要求:将一个路径中的所有文件夹切割出来。

public static void split(){
 String str=""c:\\abc\\nihao\\ninindfjds\\fdjkfjs","

\\\\""; //意思就是只要遇到"\\",就会进行切割
 String regex="\\\\";
 String[] arr=str.split(regex);
 for(String s:arr){
  System.out.println(s);
 }

 String str1="djkfsaajfdksjjdfdasfccdfjas";  //意思就是遇到叠词,就会进行切割
 String regex1="(.)\\1+";   //(.)\\1+意思就是两个或者两个以上都是相同的字母
 String[] arr1=str1.split(regex1);
 for(String s1:arr1){
  System.out.println(s1);
 }
}

 

3、替换(小程式如下:)
要求:将字符串中的叠词替换成相同的单个字符,比方说将“zzzzz”换成“z”

public static void replace(){
 String s="dfdshhhjfdlksajfluuuujfdkslafxxdk"; 
 String regex="(.)\\1+";
 String s1="$1";
 String s2=s.replaceAll(regex,s1);
 System.out.println(s2);
}

4、获取(小程式如下:)

public static void get(){
 String str="ming tian jiu yao fang jia le , da jia.";
 String reg="\\b[a-z]{4}\\b";

Pattern p=Pattern.compile(reg);
 Matcher m=p.matcher(str);
 while(m.find()){
  System.out.println(m.group());
 }
}

五、正则表达式编程常用规则
1、上来不用说,先定义自己要操作的“字符串”和“正则规则”
 String str=“我是一个字符串”;
 String reg=“我是正则表达式”;
2、然后将正则规则封装成对象,使用的是(“pattern”样式的意思,“compile”编译的意思)
 Pattern p=Pattern.compile(reg);
 返回的是Pattern类型的数据
3、然后将“字符串“和”规则“进行关联
 Matcher m=p.matcher(字符串);
4、使用while循环进行遍历,里面使用的是Matcher类创建的对象m调用自身方法find()返回的是boolean类型。
 while(m.find()){
  System.out.println(m.group()); //调用group方法返回的是满足条件的String类型的结果
}

按照java api的原话:典型的调用顺序!
注意:String类中的matches就是封装的Pattern和Matcher!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值