JAVA中的正则表达式
来源:互联网 发布:淘宝买处方药流程 编辑:程序博客网 时间:2024/06/05 15:43
20:57 2016/6/25
着并非是学习过程的整理。而是看完马士兵老师的关于正则表达式的视频后,再eclipse敲完代码后整理的。只能说是学习的一个小笔记
正则表达式--字符串处理利器 RegularExpressions用途:字符串匹配(字符匹配)
字符串查找
字符串替换
类:java.lang.String
java.util.regex.pattern
java.util.regex.Matcher
1.Pattern p1=Pattern.compile("[a-z]{3}");//编译后的匹配,先编译,速度快一些//三个a-z的字符串
Matcher matcher=p1.matcher("fgh");//matcher匹配器,匹配后的产生的模式p(matcher.matches());//返回匹配结果
2. p("fgh".matches("[a-z]{3}"));
1.2的结果是一样的,但是一是编译好的在执行的,速度和效率要比2高
初步认识+ . ? *
. 代表一个字符
? 至少出现一次或者0次
* 至少出现0次或者n次
+ 至少出现1次或者n次
a{n} 字符 a 恰好出现n次
a{n,} 字符 a 至少出现n次
a{n,m} 至少n次,但不超过m次
范围
一个[] 只能代表一个字符
^代表非
-代表一个范围
[a-zA-Z] [a-z]|[A-Z] [a-z[A-Z]] 都表示的字母的大小写都可以
预定义字符类 \w \W \d \D \s \S \
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
\d 数字字符[0-9]
\D 非数字字符[^0-9]
\s 空格字符[\t\n\x0B\f\r]
\S 非空白符[^\w]
在java中 "\\"代表\ 所以在匹配的时候要用四个\
"\\".matcher("\\\\");转意的原因
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界(单词结束)
\B 非单词边界
Pattern p=Pattern.compile("\\d{3,5}");
String s="123-23453-234-00";
Matcher m=p.matcher(s);
匹配的方法 matches() find() LookingAt()
reset() 将字符创的位置恢复到开始 显式重置匹配器
matches是对整个字符串进行匹配
find 对子串的匹配 字符串的起始位置是移动的(matches 会对find 的匹配起始位置有影响)
LookingAt 从头看字符串的字串是否是匹配的
start end 匹配成功的开始位置和结束位置(结束位置的往后一位)
replaceAll appendReplacement appendTail
replaceAll 将符合条件的字符串全部替换
appendReplacement 部分符合条件的替换(StringBuffer,"")--替换的字符串
appendTail 将不匹配的末尾添加到StringBuffer的后面
Pattern中的字段
CANON_EQ 启用规范等价。
int CASE_INSENSITIVE 启用不区分大小写的匹配。
int COMMENTS 模式中允许空白和注释。
int DOTALL 启用 dotall 模式。
int LITERAL 启用模式的字面值解析。
int MULTILINE 启用多行模式。
int UNICODE_CASE 启用 Unicode 感知的大小写折叠。
UNIX_LINES 启用 Unix 行模式。
group 分组
在正则表达式中用()代表一个小组
小组的顺序是从左数(左括号),第几个就是第几个小组
Greedy 贪心的,表示是把整个字符串全部读进来。最大的
Reluctant 勉强的,表示只要字符串字串匹配的就可以了,不必须是全部。
Reluctant 占有的,全部读进来,按顺序读,不一样就算了
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超过 m 次
特殊构造(非捕获)
(?=X) X,通过零宽度的正 lookahead 从头往后看字符串是否含有a(但不捕获它)\\d{3}(?=a)
Back 引用
\n 任何匹配的 nth 捕获组 引用前面的(\\d\\d)\\1(代表引用前面一次)
flag引用
Pattern. CASE_INSENSITIVE 通过嵌入式标志表达式 (?i) 也可以启用不区分大小写的匹配 可以通过(?i)替换
Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);
"JAVA".matches("(?i)java");//都是不区分大小写,都一样
0 0
- JAVA中的正则表达式
- java中的正则表达式
- Java中的正则表达式
- java 中的正则表达式
- java 中的正则表达式
- java中的正则表达式
- Java 中的正则表达式
- java中的正则表达式
- java中的正则表达式
- JAVA中的正则表达式
- java中的正则表达式
- java中的正则表达式
- Java中的正则表达式
- java中的正则表达式
- java 中的正则表达式
- Java中的正则表达式
- java中的正则表达式
- Java中的正则表达式
- spring DelegatingFilterProxy 过滤器的原理及运用
- 01PL_SQL过程之输出HelloWorld
- [产品设计]华为云的产品经理不是一般得弱
- 02PL_SQL过程之声明变量
- tesseract ocr
- JAVA中的正则表达式
- 03PL_SQL过程之捕获异常
- 【codeforces685B686D】【Kay and Snowflake】【线段树合并】
- 04PL-SQL过程之声明各种简单变量
- English summary——June
- 05PL_SQL过程之使用%type声明变量
- Linux命令详解
- 06PL_SQL过程之复杂数据类型Table
- 对c++友元函数和友元类的理解