Java —— 正则表达式
0. 注意
- 正则表达式里的点号(.),可以匹配除换行符之外的所有字符
- Java 语言同其他语言中的正则表达式的不同在于:
- 对 \(反斜线)的不同处理
\\:其他语言中,表示在正则表达式中插入普通的反斜线(字面上的),不要赋予它任何的意义;- 而在 Java 中,
\\:我要插入一个正则表达式的反斜线(构成正则式),其后的字符具有特殊的意义;
\\d:表示一位数字;
\\+⇒ 加号,\\.⇒ 点;
- 对 \(反斜线)的不同处理
- 提取单词:
\\W+(一个或多个字母) - 括号
- 小括号:提取匹配的字符串,
(\s*):匹配连续空格- (0-9) 匹配
0-9本身, - [0-9]*:匹配数字,可以为空;
- {1-9}:错误写法;
- (0-9) 匹配
- 中括号:定义匹配的范围,[a-zA-Z0-9] 相应位置匹配英文字符和数字,
- [\s*]:表示匹配空格或星号;
- 大括号,表示匹配的长度,\s{3}:匹配三个空格,\s[1, 3]:一到三个空格;
- 小括号:提取匹配的字符串,
1. Java 中支持正则的类
String
str.matches(pattern):布尔判断,返回 true、false;
- ’+911’.matches(‘(-|\+)?\d+’) ⇒ true,
- ‘(-|\+)?\d+’ ⇒ 数字,以加号或者减号开头,或者没有任何符号;
- 密码中必须包含至少一个数字(
\\w*\\d\\w*):
password.matches("\\w*\\d\\w*")
StringBuffer
- StringTokenizer
2. 定义模式,完成模式(pattern)的匹配(match)
java.lang.String ⇒ java(去掉字符和点)
Pattern p = Pattern.compile("\\w+\\.");
p.match(str).replaceAll("");- \W+:表示非单词(
[^\w],\w: [a-zA-Z0-9]);
- \W+:表示非单词(
创建模式,进行匹配的步骤如下:
- 使用 (static)Pattern.compile() 静态方法编译正则表达式,其会根据 String 类型的正则表达式生成一个 Pattern 对象,(Pattern 类是对 String 类在实现正则匹配等功能上的丰富与拓展)
把你想要检索的字符串传入 Pattern 对象的 matcher() 方法,matcher() 方法会返回一个 Matcher 对象那个,其内有十分丰富的函数实现:
// 我们实现对待检索的字符串 abcabcabcdefabc 的 (abc){2,} 模式的匹配 Pattern p = Pattern.compile("abcabcabcdefabc");
Matcher m = Matcher.match("(abc){2,}");
// 迭代器,遍历和迭代进行
while (m.find()) {
System.out.println("Match \"" + m.group() + "\" at position "
+ m.start() + "-" + (m.end()-1));
}
3. 对日志文件的扫描解析
如下形式的日志文件:
String logData = "" +
"58.27.82.161@02/10/2005\n" +
"204.45.234.40@02/11/2005\n";
逐行扫描,分别将其中的时间和 ip 提取出来。
String pattern = "(\\d+[.]\\d+[.]\\d+[.]\\d+@)" +
"(\\d+{2}/\\d{2}/\\d{4})";
Scanner scanner = new Scanner(logData); // 创建对日志文件扫描的扫描器对象
while (scanner.hasNext(pattern)) {
scanner.next(pattern);
MatchResult m = scanner.match();
String original = m.group(0);
String ip = m.group(1);
String date = m.group(2);
System.out.format("%s: %s from %s\n", original, date, ip);
}
Java —— 正则表达式的更多相关文章
- java正则表达式
java正则表达式 1.Java正则表达式的语法与示例: http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式: http://www.runo ...
- Java正则表达式入门——转自RUNOOB.COM
Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...
- Java 正则表达式详解
Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...
- 【转】详解Java正则表达式语法
(转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...
- java正则表达式【大全】
[正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$& ...
- JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- JAVA正则表达式:Pattern类与Matcher类详解
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- Java 正则表达式[转载]
PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...
- Java正则表达式的应用
在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...
- Java正则表达式实用教程
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.java.util.regex包主要包括以下三个类:Pattern.Matcher和PatternSynta ...
随机推荐
- Luogu P4016 「 网络流 24 题 」负载平衡问题
吐槽题目难度,这个题建模好像比前两个都要难,但是难度评级却比第二个要低. 解题思路 依旧是考虑如何建模和建立源点汇点.每个点的货物数量到最后都一样的话肯定是等于他们的平均值.用 $num$ 数组存储原 ...
- FATE HDU - 2159
解法 完全背包但是又有别的条件(忍耐值为体力经验是价值) ①首先杀怪是有上限s的,所以需要记录杀怪的数量并且if时候还需要加上条件 ②最后还得遍历一下从小到大遍历当前dp范围内是不是已经有够经验的那么 ...
- <MySQL>入门四 事务控制语言 TCL
-- TCL /* Transcation Control Language 事务控制语言 事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行 案例:转账 name ...
- Intellij idea 生成for循环代码块
itar 生成array for代码块 for (int i = 0; i < array.length; i++) { = array[i]; } itco 生成Collection迭代 fo ...
- ubuntu环境搭建DNS服务器
1 安装bind9 apt install bind9 2 修改 named.conf.local,添加要解析的域名及对应的域名配置文件 zone "test.cn"{ type ...
- Linux命令学习(2): scp和rsync基本用法与断点续传
版权声明:本文为博主原创文章,未经允许不得转载. 引子 在平常的工作中,我经常需要在远程服务器和本地之间传输文件. 以前我都使用scp命令,直到今天因为网络中断,scp出现了stalled. 因为上传 ...
- page对象的使用及常见方法
page对象的使用及常见方法 制作人:全心全意 page对象代表JSP本身,只有在JSP页面内才是合法的.page对象本质上是包含当前Servlet接口引用的变量,可以看作是this关键字的别名. p ...
- 长久不用的mysql报错ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
mac上安装过mysql: 然而,尝试连接时报错: $ mysql -u root -p Enter password: ERROR 2002 (HY000): Can't connect to lo ...
- python学习,使用requests库来模拟登录github,post请求。
这次我们要模拟登录的页面是 https://github.com/login 首先我们先尝试着登陆一遍分析一下请求, 打开开发者工具下的network选项, 可以很清楚的看到这个会话session,而 ...
- 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游
[题解] 我们可以发现不在最小生成树上的边一定不能多次经过,因为一条不在最小生成树上的边(u,v)的边权比最小生成树上(u,v)之间的路径更长,选择不在最小生成树上的边一定不划算. 我们还需要确定最小 ...