java基础整理の正则

来源:互联网 发布:古诗软件哪个好 编辑:程序博客网 时间:2024/05/22 07:54

正则表达式:其实一种规则,有自己特殊的应用,其作用就是针对于字符串进行操作。

正则:就是用于操作字符串的规则,其中这些规则使用了一些字符表示。

下面是没有用正则的写法

public class Demo2{public static void main(String[] args) {//只能输入数字String str = "124354232";char[] arr = str.toCharArray();boolean flag = true;for(int i = 0 ;  i< arr.length ; i++){if(!(arr[i]>=48&&arr[i]<=57)){flag = false;}}System.out.println(flag?"输入正确":"输出只能是数字");}}
使用正则后

 

public class Demo2{public static void main(String[] args) {//只能输入数字String str = "12435423a2";boolean flag = str.matches("[0-9]+"); System.out.println(flag?"输入正确":"只能输入数字");}}

是不是很明显

正则的符号这里就不多说了,我简单介绍下正则的一些功能

1.比如我们要校验一个qq

没有正则之前,我们是用一堆的if-else判断:

public static void checkQQ(String qq){int len = qq.length();if(len>=5 && len <=15){if(!qq.startsWith("0")){try{long l = Long.parseLong(qq);System.out.println("qq:"+l);}catch (NumberFormatException e){System.out.println("出现非法字符");}}elseSystem.out.println("不可以0开头");}elseSystem.out.println("QQ号长度错误");}
有了正则以后呢,就简单多了

首先,我们对QQ号分析:5~15位数字,0不能开头

public static void checkQQ2()         {                                     String qq = "12345";              String reg = "[1-9][0-9]{4,14}";  boolean b = qq.matches(reg);      System.out.println("b="+b);                                 
等等……还有一些功能,这里就不多介绍了,最后来看下正则的符号

.

任何字符(与行结束符可能匹配也可能不匹配)

 

\d

数字:[0-9]

 

\D

非数字: [^0-9]

 

\s

空白字符:[ \t\n\x0B\f\r]

 

\S

非空白字符:[^\s]

 

\w

单词字符:[a-zA-Z_0-9]

 

\W

非单词字符:[^\w]

 

System.out.println("a".matches("."));        System.out.println("1".matches("\\d"));        System.out.println("%".matches("\\D"));        System.out.println("\r".matches("\\s"));        System.out.println("^".matches("\\S"));        System.out.println("a".matches("\\w"));

 

Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好n次

X{n,}

X,至少n次

X{n,m}

X,至少n次,但是不超过m次

System.out.println( "a".matches(".") );System.out.println( "a".matches("a") );System.out.println("a".matches("a?") );System.out.println( "aaa".matches("a*") );System.out.println( "".matches("a+") );System.out.println( "aaaaa".matches("a{5}") );System.out.println( "aaaaaaaaa".matches("a{5,8}") );System.out.println( "aaa".matches("a{5,}") );System.out.println( "aaaaab".matches("a{5,}") );

 

范围表示

[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](减去)

 

 

      

 System.out.println( "a".matches("[a]") );        System.out.println( "aa".matches("[a]+") );        System.out.println( "abc".matches("[abc]{3,}") );        System.out.println( "abc".matches("[abc]+") );        System.out.println( "dshfshfu1".matches("[^abc]+") );        System.out.println( "abcdsaA".matches("[a-z]{5,}") );        System.out.println( "abcdsaA12".matches("[a-zA-Z]{5,}") );        System.out.println( "abcdsaA12".matches("[a-zA-Z0-9]{5,}") );        System.out.println( "abdxyz".matches("[a-c[x-z]]+"));        System.out.println( "bcbcbc".matches("[a-z&&[b-c]]{5,}"));        System.out.println( "tretrt".matches("[a-z&&[^b-c]]{5,}"));


       

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾


0 0
原创粉丝点击