匹配字符串的方法
String类中的matches方法,功能强大,可以匹配符合一个模式的字符串集。如,以下结果都为true。
"java is fun".matches("java.*");
"java is cool".matches("java.*");
"java is nb".matches("java.*");
正则表达式的语法
注意点:
- 反斜杠 “” 在java中用 “\” 来表示。
- 空白字符 ‘\s’ 为:’ ‘、’\t’、’\n、’\r’、’\f’.
- 在正则表达式中,默认“贪婪”得匹配,即能多匹配尽可能多匹配
- 若想“懒惰”得匹配,则在正则表达式后加上‘?’
正则表达式 | 匹配 | 示例 |
---|---|---|
x | 指定字符x | java 匹配 java |
. | 除了换行符外的任意单个字符 | java 匹配 j…a |
(ab|cd) | ab或者cd | ten 匹配 t(en|im) |
[abc] | a、b或c | java 匹配 ja[sdvc]a |
[^abc] | 除了a、b或c意外的任意字符 | java 匹配 ja[^edg]a |
[a-z] | a到z | java 匹配 [a-m]av[a-d] |
[^a-z] | 除了a到z以外的任意字符 | java 匹配 jav[^f-l] |
[a-e[m-p]] | a到e或m到p | java匹配 [a-g[i-m]]av[a-d] |
[a-e&&[c-p]] | a到e与c到p的交集 | java 匹配 [a-p&&[i-m]]av[a-d] |
\d | 一位数字,等同于 [0-9] | java1 匹配 java[\d] |
\D | 一位非数字 | java# 匹配 jav[\D][\D] |
\w | 单词字符 | java 匹配 jav[\w] |
\W | 非单词字符 | java# 匹配 java[\W] |
\s | 空白字符 | java 2 匹配 java\s2 |
\S | 非空白字符 | java 匹配 [\S]ava |
p* | 0或多次出现p | aaaa匹配 “a*” abab 匹配 “(ab)*” |
p+ | 1或多次出现p | a匹配 “a+b*” edgnb 匹配 “(edg)+.*” |
p? | 0或1次出现p | java 匹配 “j?java” ava 匹配 “j?ava” |
p{n} | 正好出现n次p | aaaa匹配 “a{4}” java 不匹配 “.{2}” |
p{n,} | 至少出现n次p | aaaa匹配 “a{2,}” a 不匹配 “a{2,}” |
p{n,m} | n到m次出现p | aaaa匹配 “a{1,9}” abbb 不匹配 a{2,9}bbb", |
\p{P} | 一个标点字符~!@#$%^&*()等 | j?va匹配 “j\p{P}va” |
替换和拆分字符串
String类包含replaceAll、replaceFirst 和 split方法,用于替换和拆分字符串。
下面展示一些 内联代码片
。
//replaceAll()方法
System.out.printLn("java java java".replaceAll("v\\w","wi"));
//输出 jawi jawi jawi
//replaceFirst()方法
System.out.printLn("java java java".replaceFirst("v\\w","wi"));
//输出 jawi java java
//split(regex,limit=0)方法
//使用匹配的分隔符将字符串拆分为子字符串
//limit>0时,最多匹配limit-1次,最终拆分成limit个子字符串。
String[] tokens;
tokens="edg1zhen2ta3ma4niu5bi".split("\\d");
System.out.printLn(tokens);
//输出 edg zhen ta ma niu bi
tokens="edg1zhen2ta3ma4niu5bi6".split("\\d",1);
System.out.printLn(tokens);
//输出 edg1zhen2ta3ma4niu5bi
tokens="edg1zhen2ta3ma4niu5bi6".split("\\d",2);
System.out.printLn(tokens);
//输出 edg zhen2ta3ma4niu5bi
tokens="edg1zhen2ta3ma4niu5bi6".split("\\d",3);
System.out.printLn(tokens);
//输出 edg zhen ta3ma4niu5bi
tokens="edg1zhen2ta3ma4niu5bi6".split("\\d",4);
System.out.printLn(tokens);
//输出 edg zhen ta ma4niu5bi
tokens="edg1zhen2ta3ma4niu5bi6".split("\\d",5);
System.out.printLn(tokens);
//输出 edg zhen ta ma niu5bi
tokens="edg1zhen2ta3ma4niu5bi6".split("\\d",6);
System.out.printLn(tokens);
//输出 edg zhen ta ma niu bi