java正则表达式

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

用正则表达式来判断是否是数字,如果不是就剔除数字之外的字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值