java 正则表达式
来源:互联网 发布:mac autotools 编辑:程序博客网 时间:2024/04/30 10:30
正则表达式
符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用一些特定符号来表示一些代码操作,这样就可以简化书写;学习正则表达式就是在学习一些特殊符号的使用。
基本正则表达式语法
下面这些基本正则表达式及语法以jdk 1.6手册中都有,这里记录在这,以方便可以网络方式查阅。
字符类:[ ]代表一个字符位上出现的字符
[abc]:a、b或c
[^abc]:任何字符,除了a、b或c
[a-zA-Z]:a到z或A到Z的任何字符,包含2头的字母在内
[a-d[m-p]]:a到d或m到p,也可写成[a-dm-p]
[a-z&&[def]]:d、e或f(交集)
[a-z&&[^bc]]:a到z,除了b和c,即[ad-z]
[a-z&&[^m-p]]:a到z,而非m-p,[a-lq-z]
预定义字符类
.(一个点):任意字符
\d:数字,相当于[0-9]
\D:非数字,[*0-9]
\s:空白字符,[\t\n\x0B\f\r],\f是换页符,\xhh指带有十六进制值的字符hh
\S:非空白字符,[^\s]
\w:单词字符,[a-zA-Z0-9]
\W:非单词字符
java中反斜杠'\'有转义作用,会将后面紧跟的字符转义,所以上面预定义字符(除.)使用时,前面还要再一个反斜杠,表示r后面是一个整体,不转义。
边界匹配器
^:行的开头
$:行的结尾,\n、\r、\r\n、\u0085、\u2028(行分隔符)、\u2029(段落分隔符)都被认为是行结束符
\b:单词边界
\B:非单词边界
\A:输入的开头
\G:上一个匹配的结尾
\Z:输入的结尾,仅用于最后的结束符(如果有的话)
\z:输入的结尾
数量词
X?:X出现一次或一次也没有
X*:X出现零次或多次
X+:X出现一次或多次
X{n}:X出现恰好n次
X{n,}:X出现至少n次
X{n,m}:X出现至少n次,但不超过m次。
正则表达式组
()括起来的代表一个正则表达式组,组的出现都有编号,从1开始,想要使用已有的组,可通过\n(n是组的编号)的形式来获取。
((A)(B(C)))表达式里有4个组:
1-((A)(B(C)))
2-\A
3-(B(C))
4-(C)
组零使用代表整个字符串。
正则表达式功能及用法
1. 匹配
boolean matches(String regex),String类中的方法,用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
常用的匹配正则表达式
QQ号:[0-9]\\d{4,14}
手机号:1[358]\\d{9}
叠词:(.)\\1+
邮件:较为精确的匹配:[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+
相对不太精确的匹配:\\w+@\\w+(\\.\\w+)+
2. 切割
String[] split(String regex),String类中的方法。
用空格切割时,正则表达式使用“ +”,可用于切割英文句子中的单词
用.来切割时,需要使用"\\.",可用于切割IP地址、英文全名等。
3. 替换
String replaceAll(String regex, String replacement),将满足正则表达式的所有子串替换成replacement代表的字符串,返回替换后的字符串。
将多个叠词替换成单个字母:replaceAll("(.)\\1+",”$1“),用$在外部获取前一个正则表达式中的组。
4. 获取
将字符串中符合规则的子串取出。
操作步骤:
(1) 将正则表达式封装成对象
(2) 将正则对象和要操作的字符串相关联
(3) 关联后,获取正则匹配引擎
(4) 通过引擎对符合规则的子串进行操作,比如取出
/*需求:取出字符串中长度为4的单词*/import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexDemo {public static void main(String[] args) {getDemo();} public static void getDemo(){ String str="this is a brand new day, guys have your fun!"; 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()); } }}/*运行结果:this0.....4guys25.....29have30.....34your35.....39*/
这里简单介绍下上面代码中用的Matcher 匹配器类:
无构造函数,类中有静态方法matcher()可以获取匹配器对象。
Matcher类有多个匹配字符串的操作方法,可以查阅jdk API手册,这里不再一一列出。
boolean matches(),将整个字符串与规则匹配,与String类中的matches方法类似;实际String类中的matches方法用的就是Pattern和Matcher对象来完成的,只不过被String封装后用起来较为简单,但功能却较为单一。
Matcher类中也有replaceAll()方法,Stirng类的replaceAll()方法也是使用了此方法。
Match类中还有方法可以获取匹配子串在整串中的索引:
int start(),返回上一个匹配的子串的初始索引。
int end(), 返回上一个匹配的子串的末尾索引(含头不含尾,子串中没有不包含该方法返回索引的字符)。
使用正则表示的示例代码:
1. 去掉小数后多余的0
/** * 使用java正则表达式去掉多余的.与0 * @param s * @return */ public static String subZeroAndDot(String s){ if(s.indexOf(".") > 0){ s = s.replaceAll("0+?$", "");//去掉多余的0 s = s.replaceAll("[.]$", "");//如最后一位是.则去掉 } return s; }
正则表达式使用思考方式:
1. 如果只想知道该字符的对错,使用匹配
2. 想要将已有的字符串变成另一个字符串,使用替换
3. 想要按照自定义的方式将字符串变成多个字符串,使用切割,得到的是规则以外的子串
4. 想要拿到符合需求的字符串子串,使用获取,得到的是符合规则的子串。
- Java 正则表达式正则
- 【正则表达式】Java正则表达式
- 正则表达式 JAVA正则表达式
- 【Java】【正则表达式】正则表达式
- Java 正则表达式详解_正则表达式
- java正则表达式!正则表达式踩坑!!!
- 正则表达式工具类,正则表达式封装,Java正则表达式
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- java和正则表达式
- java正则表达式详解!
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Push的原理及证书生成
- Android Intent mFlags属性的设置
- AndroidUI组件之AdapterViewFilpper
- C的基础上学习C# (第五章--变量的更多内容) .
- How To change the Port Pool in the E-Business Suite
- java 正则表达式
- jfreechart使用柱状图重叠
- Centos 系统扩展VolGroup-lv_root分区
- HDU 1004 Let the Balloon Rise(Map)
- BroadCast广播接收者
- android webview 输入框点击不弹键盘
- MySQL Memo
- net加壳技术
- Ubuntu下配置NFS服务