java中用public Boolean matches(String regex)方法判断字符串对象是否与参数regex匹配。
用public StringreplaceAll(String regex,String replacement)来把字符串中正则表达式所表示的字符串跟目标字符串进行替换。
用public String[] split(String regex)来把目标字符串按照相应的正则表达式分解。
下列先给出在正则表达式中各字符所表达的意思,之后还有几个实例帮助理解:
正则表达式元字符意义表
元字符 | 在正则表达式中的写法 | 意义 |
. | . | 任意一个字符 |
\d | \\d | 任意一个0~9数字 |
\D | \\D | 任意一个非数字字符 |
\s | \\s | 空格类字符,’\t’,’\n’,’\x0B’,’\f’,’\r’. |
\S | \\S | 非空格类字符 |
\w | \\w | 可用于标识符的字符(不包含美元字符) |
\W | \\W | 不能用于标识符的字符 |
\p{Lower} | \\p{Lower} | 小写字母 |
\p{Upper} | \\p{Upper} | 大写字母 |
\p{ASCII} | \\p{ACSII} | ASCII字符 |
\p{Alpha} | \\p{Alpha} | 字母 |
\p{Digit} | \\p{Digit} | 数字0~9 |
\p{Alnum} | \\p{Alnum} | 字母或数字 |
\p{Punct} | \\p{Punct} | 标点符号:!,@,#,$,%等 |
\p{Graph} | \\p{Graph} | 可视字符 |
\p{Print} | \\p{Print} | 可打印字符 |
\p{Blank} | \\p{Blank} | 空格或制表符 |
\p{Cntrl} | \\p{Cntrl} | 控制字符 |
限定符表:
带限定符号的模式 | 意义 |
X? | X出现1次或0次 |
X* | X出现0次或多次 |
X+ | X出现1次或多次 |
X{n} | X出现n次 |
X{n,} | X至少出现n次 |
X{n,m} | X出现n~m次 |
在正则表达式中可以用方括号括起来若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符。
如:regex=[123]ABC,那么“1ABC”,“2ABC”,“3ABC”都与regex匹配。
[abc]:abc中的任一个字符。
[^abc]:除了abc的任一个字符。
[a-zA-Z]:a~z和A~Z中的任一个。
[a-d]:a~d中的任一个。
[a-d[m-p]]:a~d或m~p中的任一个。
[a-z&&[def]]:def和a~z交集中的任一个也就是def中的任一个。
[a-f&&[^bc]]:表示a~f中除了b,c的字符。
对于单独的^开头表示只能以^之后的字符kai开头,"^\\d"表示只能以0~9的数字开头:
对于以$结尾的表示只能以$之前的字符结尾,“\\d$”表示只匹配以0~9的数字结尾的字符串。
实例:
匹配:
package zhengze;
public class t1 {
public static void main(String[] args) {
String s="1jfdioj";
System.out.println(s.matches("[123]jfdioj"));
}
}
输出true
证明他们能够匹配,原串s中除了1和匹配串[123]之外其他字符都匹配,而在正则表达式中,1只要[123]中的任意一个字符匹配他们就匹配。上面没有列出这种情况所以这里特例说明。
test1:
package zhengze;
public class t1 {
public static void main(String[] args) {
String s="_jfdioj";
System.out.println(s.matches(".jfdioj"));
}
}
输出true
因为在正则表达式中.代表任意一个字符。
替换:
package zhengze;
public class t1 {
public static void main(String[] args) {
String s="_jfAdiDoQj";
String regex="\\p{Upper}";
String str=s.replaceAll(regex, "KeKe");
System.err.println(str);
}
}
输出: _jfKeKediKeKeoKeKej
上例是按照大写字母替换为KeKe之后的结果。
分隔:
package zhengze;
public class t1 {
public static void main(String[] args) {
String s="_jfAdiDoQj";
String regex="\\p{Upper}";
String[] str=s.split(regex);
for(String e:str) {
System.out.println(e);
}
}
}
输出:
_jf
di
o
j
本例就是通过大写字母用正则表达式来分隔。
正则表达式通过多种元字符的组合才更能体现出它的强大,这里讲的并不是很深,需要多加练习才能掌握。
再给一个例子~~~
package zhengze;
public class t1 {
public static void main(String[] args) {
String regex="[1-9][0-9]*[.]?[0-9]*";//第一个数字是1~9,之后有很多个数字小数点
//出现1次或没出现,之后又是许多数字。
String s1="12r34q5";
if(s1.matches(regex)) {
System.out.println(s1+"可以表示数字");
}
else {
System.out.println(s1+"不能表示数字");
String result=s1.replaceAll("\\D+", ",");
System.out.println("剔除"+s1+"的非数字字符之后得到的字符串是:");
System.out.println(result);
}
}
}
输出:
12r34q5不能表示数字
剔除12r34q5的非数字字符之后得到的字符串是:
12345
用正则表达式来判断是否是数字,如果不是就剔除数字之外的字符。