博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16、正则表达式
阅读量:6036 次
发布时间:2019-06-20

本文共 1995 字,大约阅读时间需要 6 分钟。

一、正则表达式

  • 正则表达式:符合一定规则的表达式。
  • 作用:用于专门操作字符串。
  • 特点:用一些特点的符号来表示一些代码操作,这样就简化了书写。
  • 好处:可以简化对字符串的复杂操作。
  • 弊端:符号定义越多,正则越长,阅读性越差。

1.1、匹配

String类的boolean matches()方法:用规则匹配整个字符串,只要一处不符合规则,就匹配结束。

  • [abc]:表示字符串中任意位置如果有a或者b或者c才返回真,注意是单个字符。
  • [~abc]:表示字符串中任意位置只要不是a或者b或者c才返回真,单个字符。
  • [abc][1-9]:表示第一个位置只能是a或者b或者c,字符串第二个位置只能是1-9之间。

拓展:[a-zA-Z][0-9]:表示第一个位只能是字母,第二位只能是数字。

  • [a-d[m-p]]:取并集,也可以写成[a-dm-p]。
  • [a-z&&[des]]:取交集,d,e或者f。
  • [a-z&&[~bc]]:a-z中除了b和c。
  • [a-z&&[~m-p]]:a-z中,除了m-p。也就是除了m,o,p外都行。

    在正则表达式中,反斜杠要出现都是一对对出现的。

1.2、预定义字符类

  • .  任何字符(与结束符可能匹配也可能不匹配)。
  • \d 数字[0-9]
  • \D 非数字[~0-9]
  • \s 空白字符。
  • \S 非空白字符。
  • \w 单词字符。字母数字和下划线。[a-zA-Z_0-9]
  • \W 非单词字符。

1.3、Greedy 数量词

(X表示正则表达式,匹配的是整个字符串)

  • X?          X,一次或一次也没有
  • X*          X,零次或多次
  • X+          X,一次或多次
  • X{n}        X,恰好 n 次
  • X{n,}        X,至少 n 次
  • X{n,m}        X,至少 n 次,但是不超过 m 次

  练习:匹配手机号,手机号段只有 13xxx 15xxx 18xxx

1.4、正则表达式使用

1、切割:

String[] split(String regex);
特殊切割:

(1)splitDemo("zhangsan   lisi   wangwu"," +");    //String reg = " +";//按照多个空格进行切割(2)/splitDemo("zhangsan.lisi.wangwu","\\.");    //String reg = "\\.";//因为正则.为特殊符号,所以需要转义。(3)splitDemo("c:\\abc\\a.txt","\\\\");    //String reg = "\\\\";//因为一个反斜杠需要两个表示才不能转义,所以两个就需要四个来切。(4)splitDemo("erkktyqquio","(.)\\1");    //按照叠词完成切割。让规则结果被重用。可以将规则封装成组,用()完成,组的出现都有编号,从1开始。想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。(5)splitDemo("erkkkkkktyqqqqqquio","(.)\\1+");    //按照多叠词完成切割。

例:solitDemo方法我自定的,看起来简便。复习时,看怎么操作就行。

public static void splitDemo(String str,String reg){    String[] arr = str.split(reg);    for(String s:arr){        System.out.println(s);    }}

2、替换

String replaceAll(String regex, String replacement)

3、获取

String str = "ming tian jiu yao fang jia la。";//取出连续出现四个单词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());    System.out.println(m.start()+"::"+m.end());//获取角标}

其实String类中的maches()方法就是Pattern和Matcher对象来完成的。只不过被String的方法封装后用起来较为简单,但是功能却单一。

  • boolean find();//将规则作用到字符串上,并进行符合规则的子串查找。
  • m.group()用于获取匹配后结果。

转载于:https://www.cnblogs.com/pengjingya/p/5532671.html

你可能感兴趣的文章
git简单命令
查看>>
LAMP编译部署
查看>>
XenDesktop7.6安装部署入门教程
查看>>
HashMap的工作原理及HashMap和Hashtable的区别
查看>>
GregorianCalendar日历程序
查看>>
Sublime 中运行 Shell 、Python、Lua、Groovy...等各种脚本
查看>>
【Java集合源码剖析】ArrayList源码剖析
查看>>
linux基础概念和个人笔记总结(6)
查看>>
一图胜千言 -- SQL Server 基准测试
查看>>
微小说精选
查看>>
我的友情链接
查看>>
主板典型故障解决方法
查看>>
Hadoop集群搭建步骤
查看>>
更改ubuntu的系统语言
查看>>
jvm参数详解,内存泄露解决
查看>>
升级Windows Management Framework对事件转发的影响
查看>>
我的友情链接
查看>>
后缀数组 --- HDU 3518 Boring counting
查看>>
mysql查询两个日期之间相差多少天?
查看>>
sublime text 3配置c/c++编译环境
查看>>