java中的正则表达式总结

1、用到的类

       Java.lang.String;  java.util.regex.Pattern;     java.util.regex.Matcher

2、用到正则表达式的几个例子

   public static void p(Object o)

   {

      System.out.println(o);

   }

①判断字符串与个正则表达式是否匹配

p("fgh".matches("[a-z]{3}")); //直接匹配

Pattern p = Pattern.compile("[a-z]{3}");//Pattern代表一种模式

Matcher m = p.matcher("fgh");            //Matcher叫做匹配器,

//匹配结果放在m中

p(m.matches());                            //判断是否匹配

3、Greedy数量词

?

X,一次或一次也没有

p("aaaa".matches("aaaaa?"));

X*

X,零次或多次

p("aaaa".matches("a*"));

X+

X,一次或多次

p("aaaa".matches("a+"));

X{n}

X,恰好 n

p("aaaa".matches("a{4}"));

X{n,}

X,至少 n

p("aaaa".matches("a{1}"));

X{n,m}

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

p("aaaa".matches("a{1,4}"));

4、字符类  [ ]只匹配一个字符

[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-d]|[m-p]

[a-z]

a到z之间的数

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

 

 

5、预定义字符

.

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

 

\d

digit数字:[0-9]

[0-9]

\D

非数字: [^0-9]

[^0-9]

\s

whitespace空白字符:

[ \t\n\x0B\f\r]

\S

非空白字符:

[^\s]

\w

单词字符:

[a-zA-Z_0-9]

\W

非单词字符:

[^\w]

\\

反斜杠字符

 

注:      ①java中 \\代表\

             ②匹配”\”的方法为:“\\”.matches(“\\\\”);

6、边界匹配

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

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

\z

输入的结尾

7、Matcher的matches、find、lookingAt方法

matches        永远匹配整个字符串

find               找子串是否匹配(与matches可能互相影响,用reset方法重置一下)

lookingAt      每次从头开始找

Pattern p = Pattern.compile("\\d{3,5}");

String s = "123-34345-234-00";

Matcher m = p.matcher(s);

p(m.matches());

m.reset();               //重置匹配器

p(m.find());              //true

p(m.start()+"-"+m.end());   //0-3

p(m.find());              //true

p(m.start()+"-"+m.end());   //4-9

p(m.find());              //true

p(m.start()+"-"+m.end());   //10-13

p(m.find());              //false

p(m.lookingAt());        //从头开始找

p(m.start()+"-"+m.end());

p(m.lookingAt());        //从头开始找

p(m.start()+"-"+m.end());

结果:false true true true false true true

如果不加m.reset,结果为:false true true false false true true

因为m.matches()匹配不成功后,光标会停在不匹配的地方。

8、输出匹配的起始位置和结束位置

       起始位置     m.start()       起始索引

       结束位置     m.end()        结束索引+1

注意:确定匹配成功后才可以使用start()和end(),否则会报错。

9、打印匹配结果

使用p(m.group());

例子:找到字符串中能匹配”java”的子串,不区分大小写

Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);

Matcher m = p.matcher("java Java jaVa I Love JAVA");

while(m.find())

{

   p(m.group());

}

10、字符串替换

例子:字符串中所有的子串不区分大小写,全部替换为“JAVA”。

Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);

Matcher m = p.matcher("java Java jaVa");

p(m.replaceAll("JAVA"));

11、分组group

       利用( )将模式分组,第n个( )里内容对应group(n)。

Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");

String s = "123mm-34345bb-234cc-00";

Matcher m = p.matcher(s);

while(m.find())

{

   p(m.group());

   p(m.group(1));

   p(m.group(2));

   p("");

}

123mm

123

mm

 

34345bb

34345

bb

 

234cc

234

cc

 

12、Greedy、Reluctant、Possessive区别

Greedy

Reluctant

Possessive

X?

X??

X?+

X*

X*?

X*+


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值