$Java正则表达式基础整理
(一)正则表达式及语法简介
- String类使用正则表达式的几个方法:
- 正则表达式支持的合法字符:
- 特殊字符:
- 预定义字符:
- 方括号表达式:
- 圆括号表达式:用于将多个表达式组成一个子表达式,可以使用或运算符“|”,比如正则表达式:"(aa|bb|cc)"就表示匹配"aa"、"bb"、"cc"三个字符串中的其中一个。
- 边界匹配符:
- 贪婪、勉强、占有模式的数量标识符:
(二)Java正则表达式的简单用法
- 两个关键类:(1)Pattern:正则表达式编译后在内存中的表示形式。是不可变类,可供多个线程并发使用;(2)Matcher:保存执行匹配所涉及的各种状态,多个Matcher对象可以共享一个Pattern对象。
- 简单用法程序示例:
System.out.println(Pattern.matches("a\\wb", "a_b")); // 输出:true
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aabzaaadaaafbc");
System.out.println(m.matches()); // 输出:false Matcher类的常用方法:
- 程序举例:
public static void test1() {
System.out.println(Pattern.matches("a\\wb", "a_b")); // 输出:true Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aabzaaadaaafbc"); System.out.println(m.matches()); // 输出:false
System.out.println(m.find()); // 输出:true
System.out.println(m.group()); // 输出:b
System.out.println(m.start()); // 输出:2
System.out.println(m.end()); // 输出:3
System.out.println(m.lookingAt()); // 输出:true
m.reset("zab");
System.out.println(m.lookingAt()); // 输出:false
} public static void test2() {
Matcher m = Pattern.compile("\\w+").matcher("Java is very easy!"); while (m.find()) {
System.out.println(m.group() + "子串的起始位置:" + m.start() + ",结束位置:"
+ m.end());
} int i = 0;
while (m.find(i)) {
System.out.print(m.group() + "\t");
i++;
} // 输出:
// Java子串的起始位置:0,结束位置:4
// is子串的起始位置:5,结束位置:7
// very子串的起始位置:8,结束位置:12
// easy子串的起始位置:13,结束位置:17
// Java ava va a is is s very very ery ry y easy easy asy sy y
} public static void test3() {
String[] mails = { "Jiayongji@163.com", "Jiayongji@gmail.com",
"jy@hust.org", "wawa@abc.cc" };
String mailRegEx = "\\w{3,20}@\\w+\\.(com|cn|edu|org|net|gov)";
Pattern mailPattern = Pattern.compile(mailRegEx); Matcher mailMatcher = null; for (String mail : mails) {
if (mailMatcher == null) {
mailMatcher = mailPattern.matcher(mail);
} else {
mailMatcher.reset(mail);
} System.out.println(mail + (mailMatcher.matches() ? "是" : "不是")
+ "一个合法的邮箱地址");
} // 输出:
// Jiayongji@163.com是一个合法的邮箱地址
// Jiayongji@gmail.com是一个合法的邮箱地址
// jy@hust.org不是一个合法的邮箱地址
// wawa@abc.cc不是一个合法的邮箱地址 } public static void test4() {
Matcher m = Pattern.compile("\\bre\\w*").matcher(
"Java is real good at inrestart and regex.");
System.out.println(m.replaceAll("哈哈")); // 输出:
// Java is 哈哈 good at inrestart and 哈哈. }
Refer:《疯狂Java讲义(第二版)》
(完)
随机推荐
- nc在centos7上的安装和简单使用
下载 http://vault.centos.org/6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm rpm -iUv nc-1.84-22. ...
- Java并发编程(三)概念介绍
在构建稳健的并发程序时,必须正确使用线程和锁.但是这终归只是一些机制.要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问. 对 ...
- NGINX date_udf 定义日志
Nginx日志自动按日期存储 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,因它的稳定性 ...
- Redis 3 在CentOS 6.5上安装笔记,含启动脚本
Redis的强大就不多说了,直接上菜. 第1步:下载.编译.安装 cd /opt wget http://download.redis.io/releases/redis-3.0.5.tar.gz . ...
- ios UICollectionView reloadData无法更新的奇怪问题。
报错 Assertion failure in -[UICollectionViewData invalidateItemsAtIndexPaths:] 近来偶尔用到UICollectionVi ...
- Mac下使用Homebrew 安装MySQL
安装 brew install mysql 卸载 brew uninstall mysql 启动mysql mysql.server start 管理员账户 mysql -uroot
- js 时间戳转换为指定的日期格式
function formatDate(date, fmt) { if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFul ...
- HDU4781(2013成都站A题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4781 题目大意:给你n个点m条边,要求你构造一个符合条件的有向联通图(若无法构造输出-1,否则输出任意 ...
- 《从零开始学Swift》学习笔记(Day 31)——存储属性
原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据. 存储属性可 ...
- EasyNVR摄像机无插件直播如何排查视频广场不在线
通道配置完成进入视频广场监控通道显示不在线 保证RTSP视频流地址是否可用,推荐用VLC先测试地址是否可用.(注意:软件本身只支持标准的RTSP视频流地址.) 如果是刚配置完需要等大概几秒左右有的网络 ...