用String.matches()来进行正则验证
正则表达式的构造摘要
x | 字符 x(任意字符) |
t | 制表符 ('/u0009') |
/n | 新行(换行)符 ('/u000A') |
/r | 回车符 ('/u000D') |
/f | 换页符 ('/u000C') |
/e | 转义符 ('/u001B') |
[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] |
^ | 行的开头 |
$ | 行的结尾 |
/b | 单词边界 |
/B | 非单词边界 |
/A | 输入的开头 |
/G | 上一个匹配的结尾 |
/Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
/z | 输入的结尾 |
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
XY | X 后跟 Y |
X|Y | X 或 Y |
(X) | X,作为捕获组 |
举例:
1.验证一个字符串是否以大写字母开始。
[A-Z][a-zA-Z]*
说明:[A-Z]表示此单词以大写字母A-Z开始。[a-zA-Z]*表示后接0个或几个a-zA-Z范围的字母。
*表示0个或几个,+表示1个或几个。
1. 验证一串数字是否为如下格式:123-345-5673或125-3234555(红色部分不能为0)
[1-9]//d{2}-[1-9]//d{2}-?//d{4}
说明:/d表示数字,但在Java里,/表示转义,所以要用//d。
第二个-是可要可不要的,所以用-?来加以判断。表示0个或一个。
2. 验证一个字符串是否为以下格式:123 Main 或 123 Main Street
//d+//s+([a-zA-Z]+|[a-zA-Z]+//s[a-zA-Z])
说明:/s表示空格。|表示与两边的表达式之一匹配即可。第二个//s
没有+,表示此处只能有一个空格。
4.验证字符串是否为汉字
[/u4E00-/u9FA5]
说明:中文并非只包含在这个范围内,还包括F900-FA2D.
[/u4E00-/u9FA5/uF900-/uFA2D](实际上只是CJK字符集的范围,并不是完全意义上的中文。)
替换和分割字符串
1. 将字符串中的“*”替换成“ ”。 如:"abc*123*III**df"
replaceAll("//*"," ");
说明:这里使用了//*,而不是*。因为*在正则中有它的意思。所以使用/*,但/在正则中也有
含义,所以要使用//*。
2. 将字符中的字母和数字替换成“word”。如: "this is a 测试"
replaceAll(“//w”,”word”);
说明://w表示任何字符[a-zA-Z0-9],因此此替换不会替换空格和中文字符。
3. replaceFirst:替换第一个与模式匹配的字符串。如“1-one 2-two 3-three”,将数字替换为“digit”
for(int i=0;i<3;i++){
s=s.replaceFirst("//d","digit");
}
说明:每次替换第一个遇到的数字。
4.split:根据匹配的正则表达式将原字符串分割开,不存为字符串数组。
如: 将字符串“1-one 2-two 3-three”以空格分割开并存为数组。
s.split("//s+");
说明: 之所以是//s+是因为空格可能不为一。但不可用//s*。