正则表达式:
正则表达式的作用:约束字符串的格式
字符集:
[] :方括号表示其中的内容任选其一,代表一个字符
[1234] 1,2,3,4任选其一
() :表示一组内容,圆括号中可以使用"|"符号
| :逻辑或关系
^ :非,除了
[^12] 除了1或2的其他字符
- :范围,范围应从小到大
[0-9]表示此字符只能是数字
[a-f]表示此字符只能是a,b,c,d,e,f之一
[0-6a-fA-F] 0123456abcdefABCDEF
{n,m} :修饰前一个字符,表示其出现n-m次.n应小于m
{n} :修饰前一个字符,表示其出现n次
{n,} :修饰前一个字符,表示其出现n次以上
0[xX][0-9a-fA-F]{1,8}
0x7fffffff int最大值
预定义字符集:
\d :表示一个数字.与[0-9]意思一致
. :表示任意字符
\w :表示单词字符.[0-9a-zA-Z_] 包含个下划线
\s :表示空白: \t \n \r \b \p
\D :表示非数字
\W :非单词字符
\S :非空白
? :修饰前一个字符出现0-1次. {0,1}
+ :修饰前一个字符出现1次以上.{1,}
* :修饰前一个字符出现任意次. {0,}、
"^$" ^表示以什么开头 $表示以什么结尾
. | 都是特殊字符 java中使用时需要转义
| 可以使用在() 也可以使用在[]
=======================================================
String中对正则表达式的支持
String的API中有几个方法支持正则表达式
matches() 匹配正则表达式
slipt() 根据正则表达式拆分字符串
replaceAll() 将满足正则表达式的部分已给定字符串替换
matches(String regex) 完全匹配正则返回true 部分匹配或不匹配返回false
split(String regex)返回的是String数组,可以通过将数组转换为字符串来显示
replaceAll(String regex,String text),用text文本来替换匹配的字符 返回String
下面介绍java pattern类使用正则
1.最简单的模式匹配判断
Pattern.matches(regex, str),它等同于Pattern.compile(regex).matcher(str).matches();
2.按模式分割字符串
Pattern.compile(regex).split(str),它等同于str.split(regex)
创建 : Pattern pattern=Patter.compile(String regex);
创建匹配器 Matcher matcher=pattern.matcher(String str or StringBuffer sb);
pattern 方法:reset()用来重置匹配字符起始位置,作用后面讲。
matcher方法:find(int index)部分匹配---只要字符串中存在匹配的字符就返回true,通常如此while(matcher.find()){}使用,第二次匹配会接着第一次匹配之后进行匹配,例如 aaa@bbb@cc@. "\\w" 第一次匹配到第一个@ 当再次运行find()方法时会从b开始匹配,第三次会从c开始匹配,直至匹配完整个字符串, 当这里调用第一次find()时,再调用pattern.reset()那么第二次会从头开始匹配即从a开始匹配.index参数表示从字符串的指定索引开始匹配,不写即从0开始匹配
matches()完全匹配只有整个字符串都符合正则表达式时才会返回true
start()第一个匹配的位置 这里既是a 返回0
end()返回最后一个匹配的位置 这里既是第一个@ 返回3
group(int index)存放着匹配的字符串与find()一起使用
如while(matcher.find()){system.out.print(matcher.group) },,,,,index参数 需要配合groupcount和正则表达式的符号()一起使用
String regex=“(\\w*)(\\w*)”; 其中一个()即为一个模式 matcher.groupcount()即返回模式的个数,索引从1开始
index参数为0是显示第一次匹配的全部符合的字符串,当为1<n<=matcher.groupcount()即返回的是每次匹配的指定的模式的匹配的字符串
正则 贪婪模式和懒惰模式:
贪婪模式:a111111ba22222222b "a\\.*b" 返回的是a111111ba22222222b 即返回最长的
懒惰模式: “a\\.*?b”需要加个?表明为懒惰模式 ,返回的是a11111111b a2222222222b 两次
+ ?* {0,} 默认的都是贪婪模式