前段时间做些小东西的时候遇到字符串提取处理,感觉写起来非常费力,于是再次温习了正则表达式内容,在原来模糊的基础上学习了许多:
基础的比如:
?
\ 的作用匹配字符,如需要匹配反斜线则为:("\\".matches("\\\\"),注意因为程序把反斜线作为转义字符需要再次转义为反斜线。
?
[] 的作用是匹配每个特定范围的单个字符,其中&&表示交集^表示非该范围字符
如:"y".matches("[a-z&&[^stz]]"??? //表示在a-z并除去stz的范围。
???????【a-q【q-z】】表示是a-q或q-z范围。
?
?
预定义字符类 . 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W非单词字符:[^\w]
?
?
?
?
?
?
{ m,n} 作用是限定前面内容的次数范围
如:"211525".matches("\\d{3,10}") //表示匹配数字个数在3到10的字符串。
?
? *? + 的作用是限定次数,?表示一次或一次也没有,*表零次或多次,+一次或多次。
?
Greedy 数量词
默认模式,先吞掉最多个数字符,然后判断匹配,然后再依次吐出一个字符来匹配,直到没有。
?
?
Reluctant (不情愿的)数量词?
再改模式下,先吞掉最少限制数量字符个数的字符,然后判断匹配,然后再依次吞一个字符,直到匹配成功或都匹配不到。
?
Possessive 数量词+
独占式,吞了不往外吐,也不查找子串的匹配是否。
?
大家需要根据需求自由选择不同模式。