java正则表达式:
来源:互联网 发布:淘宝网秋冬季节短裙子 编辑:程序博客网 时间:2024/06/06 17:07
正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作。
String类里也提供了如下几个特殊的方法:
(1)boolean matches(String regex) 判断该字符串是否匹配指定的正则表达式。
(2)String replaceAll(String regex,String replacement) 将该字符串中所有匹配regex的字串替换成replacement
(3)String replacementFirst(String regex,String replacement) 将该字符串第一个匹配regex的字符串替换成replacement
(4)String [] split(String regex) 以regex作为分隔符,将字符串分割为多个字串
这些方法都依赖java提供的正则表达式提供支持,此外,java还提供了Patter和Matcher两个类专门提供正则表达式支持。
————————————————————————————————————————————————————
创建正则表达式:
正则表达式是一个用于匹配字符串的模板,可以匹配一批字符串,创建正则表达式就是创建一个特殊的字符串。
(1)正则表达式支持的合法字符
x 字符x(x可以代表所有合法的字符)
\0mnn 八进制数0mnn所代表的字符
\xhh 十六进制0xhhhh所代表的字符
\uhhhh 十六进制0xhhhh所表示的Unicode字符
\t 制表符(‘\u009’)
\n 换行符(’\u000A’)
\r 回车符(’\u000D’)
\f 换页符(’\u000C’)
\a 报警(bell)符(’\u0007’)
\e Escape符(’\u001B’)
\cx x对应的控制符。例如 \cM匹配Ctrl-M x的值必须为A~Z或a~z之一
————————————————————————————————————————————
除此之外,正则表达式中有一些特殊字符,这些特殊字符在正则表达式中有特殊的用途,比如反斜杠(\),如果需要匹配这些字符,就必须先将这些字符转义,也就是在前面加一个反斜杠(\)。特殊字符如下
^ 匹配一行的开头 , 要匹配本身,用\^
() 标记子表达式的开始和结束位置 ,要匹配本身,用( )
[ ] 用于确定中括号表达式的开始和结束位置。要匹配本身,用[ ]
{} 用于表示前面子表达式出现频度,要匹配本身,用{ }
* 指定前面子表达式可以出现零次或多次,要匹配本身,用 *
+ 指定前面表达式可以出现一次或者多次 要匹配本身,用+
? 指定前面表达式可以出现零次或一次 要匹配本身,用\?
. 匹配除开换行符之外所有的字符,要匹配本身,用 .\
\ 用于转义下一个字符,或指定八进制。十进制字符,要匹配本身,用\
| 指定两个选项中的任选一项,要匹配$本身,用 |
——————————————————————————————————————————————————————
将上面多个字符拼接起来,就可以创建一个正则表达式
“\u0041\\” 匹配A\
“\u0061\t” 匹配a<制表符>
“\?\[” 匹配?[
上面的正则表达式只能匹配单个字符,这是因为还未在这个表达式中使用通配符,通配符是可以匹配多个字符的特殊字符。正则表达式中的通配符远远超出了普通通配符的功能,它被称为预定义字符。
c\wt 可以匹配cat cbt cct c9t等一批字符串
\d\d\d-\d\d\d\d-\d\d\d\d可以匹配如000-000-0000形式的电话号码
方括号表达式比前面的预定义字符灵活很多,几乎可以匹配任何字符
——————————————————————————————————————————————
正则表达式还支持圆括号表达式,用于将多个表达式组成一个子表达式,圆括号中可以使用或运算符,例如正则表达式
((public)| (protected) | (private) )用于表示java的三个访问控制符
————————————————————————————————————————————————————————
正则表达式支持的数量标识符有如下几种模式:
(1)Greedy(贪婪模式):贪婪模式是一直匹配下去,直到无法匹配
(2)Reluctant(勉强模式):用问号(?)后缀表示,它只匹配最少的字符
(3)Possessive(占有模式):用加号后缀表示(+)目前只有java支持占有模式。
————————————————————————————————————————————
使用正则表达式:
一旦在程序中定义了正则表达式,就可以使用Pattern和Matcher来使用正则表达式。
Pattern对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译成为Pattern对象,然后再利用该Pattern对象创建对应的Matcher对象。执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可以共享一个Pattern对象。
典型的调用顺序如下:
//将一个字符串编译成Pattern对象
Pattern p=Pattern.compile(“a*b”);
//使用Pattern对象创建Matcher对象
Matcher m = p.matcher(“aaahdhhd”);
boolean b= m.matches();//返回true
——————————————————————————————————————————————————————————
Matcher类提供了如下几个常用方法。
find() 返回目标字符串中是否包含与Pattern匹配的字符串
group() 返回上一次与Pattern匹配的字串
start() 返回上一次与Pattern匹配的字串在目标字符串中的开始位置
end() 返回上一次与Pattern匹配的字串在目标字符串中的结束位置+1
lookingAt() 返回目标字符串前半部分与Pattern是否匹配。
matches() 返回整个目标字符串与Pattern是否匹配
reset() 将现有的Matcher对象应用于一个新的字符序列。
——————————————————————————————————————————————
通过Matcher类的find()和group()方法可以从目标字符串中依次提取出特定字串(匹配正则表达式子串),例如互联网的网络爬虫,他们可以从大段的网页中识别出所有的电话号码。下面程序示范了如何从大段的字符串中找出电话号码。
import java.util.regex.Matcher;import java.util.regex.Pattern;public class FindGroup{ public static void main(String[] args) { //使用字符串模拟从网上得到的网页源码 String str = "斤斤计较斤斤计较136768677677"+"啦啦啦啦啦+13988873873"+"哈哈哈哈哈哈13588819281289"; //创建一个Pattern对象,并利用它建立一个Matcher对象 //该正则表达式只抓取 136 139 的手机号 Matcher m = Pattern.compile("((136\\d)| (135\\d))\\d{8}").matcher(str); //将所有符合正则表达式的子串全部输出 while(m.find()){ System.out.println(m.group()); } }}
matches()和lookingAt()方法相似,只是matches()要求整个字符串与Pattern完全匹配时才返回true,而lookingAt只要求字符串以Pattern开头就返回true.
reset()方法可将现有的Matcher对象应用于新的字符序列。
import java.util.regex.Matcher;import java.util.regex.Pattern;public class MatchesTest{ public static void main(String[] args) { String [] mails ={"zoulv@163.com","zoulvzhou@gmail.com","zzz@hhh.org","eedw@abc.xx"}; String mailRegEx ="\\w{3,20}@\\w+\\.(com|org|cn|net|goy)"; Pattern mailPattern = Pattern.compile(mailRegEx); Matcher matcher=null; for(String mail:mails){ if(matcher == null){ matcher = mailPattern.matcher(mail); } else{ matcher.reset(mail); } String result =mail+(matcher.matches() ? "是" :"不是")+"一个有效的邮件地址"; System.out.println(result); } }}
- Java 正则表达式正则
- 【正则表达式】Java正则表达式
- 正则表达式 JAVA正则表达式
- 【Java】【正则表达式】正则表达式
- Java 正则表达式详解_正则表达式
- java正则表达式!正则表达式踩坑!!!
- 正则表达式工具类,正则表达式封装,Java正则表达式
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- java和正则表达式
- java正则表达式详解!
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Python深入:stevedore简介
- 通过反射获取泛型参数数组(Class对象 List类型)
- Fragement 应用
- js中获取键盘事件
- Eclipse 使用记录
- java正则表达式:
- 数据结构与算法 - 绪论上
- 打造最舒适的 webview 调试环境
- Linux环境下安装mongodb
- [Leetcode] Integer Replacement
- markdown编写博客语法
- C++重载 覆盖 隐藏
- 关于SurfaceView和事件的传递
- Android Studio快捷键指南(本文持续更新)