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
原创粉丝点击