------- android培训、java培训、期待与您交流! ----------
符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用一些特定的符号来表示一些代码操作。这样就简化了书写。
学习正则表达式就是在学习一些特殊符号的使用
弊端:符号定义越多,正则越长,阅读性越差。((()())())
注意:在写比较复杂的正则表达式时要进行多次全面测试
具体操作功能:
1.匹配:String matches( String regex ),用规则匹配整个字符串,只要有一处不符合则返回false
用的就是Pattern和Mathcer这两个对象来完成的
public static void method_1()
{
//用正则获取Pattern对象
Pattern p = Pattern.compile( "[1-9]\\d{4,14}" );
String s = "1234567";
//将Pattern对象与字符串关联得到一个匹配器
Matcher m = p.matcher( s );
System.out.println( m.matches() );
}
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9] ------------------》数字字母下划线,用于邮箱注册
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次 /d{4,14}
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
2.切割
1.aa bb cc 如果一个字符串空格不确定" +"表示用一个或多个空格切割
2.'.'字符点被正则表达式用来表示任意字符,所以在切割.时需要用转义字符\.来得到真实的字符
\是用\\来表示的,所以用\\.来切割。
3.c:\\abc\\a.txt 用\\\\来切割\\
3.叠词的切割。组的概念(.)将这个位上规则的结果封装成一个组,每个组都有一个编号,通过\1加上编号
来引用组的结果。"aadsabbsdddfghss" 用"(.)\\1+"来进行叠词切割
((()())()) 根据左括号确定组的个数和组的编号。
3.替换 String replaceAll(String regex, String replacement)
底层用的是Mathcer 中的replaceAll( String replacement )
1.将字符串中的数字替换成#。"12321312kasdaksdd82739821" str.replaceAll( "\\d{5,}", "#" )超过5个数字则将这些数字
都替换成#
2.erzzzzhhhhhhhkkks.将叠词换成一个词。在规则外用调用规则的结果 $1 $加上组的编号
str.replace( "(.)\\1+", "$1" ); 如果$后面没写数字,则用默认的即为整个字符串。
4.获取
Matcher 中的find方法,根据Pattern中的正则表达式在关联字符串中寻找符合规则的子串,找到就返回真,不再继续寻找。
如果没找到则继续寻找,直到找到。用Matcher中的group方法获得找到的子串
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
find与matches一个是匹配一部分,一个是匹配整个字符串。
m.start() m.end() 返回的是find前,匹配开始的位置和返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量,也就是不包含尾部。
切割就是通过start和end来将不符合规则的部分切出来的
****注意:同一个Matcher用的是同一个指针。即在用matches方法时指针移到的位置和find的是共享的
使用正则表达式:
1.如果只想知道该字符串是对是错,则使用匹配。matches
2.如果将已有的字符串换成另一个字符串,则使用替换
3.如果想要按自己的方式将字符串变成多个字符串则用切割。切割是获取规则以外的字串
4.想要拿到符合规则的子串,则用获取。
切割和获取的区别:一个是拿到符合规则的子串,一个是拿到符合规则以外的子串
------- android培训、java培训、期待与您交流! ---------- 详细请查看:http://edu.youkuaiyun.com/heima/