黑马程序员——java基础---正则表达式

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

正则表达式

一、概述

定义:符合一定规则的表达式。

作用:用于专门操作字符串。

特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。

所以学习正则表达式,就是在学习一些特殊符号的使用。

好处:可以简化对字符串的复杂操作。

弊端:符号定义越多,正则越长,阅读性越差。

二、构造摘要

仅仅列举一些常用的功能,具体的详见API。

字符

x

字符 x

\\

反斜线字符

\0n

带有八进制值 0 的字符 n (0 <= n <= 7)

\0nn

带有八进制值 0 的字符 nn (0 <= n <= 7)

\0mnn

带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)

\xhh

带有十六进制值 0x 的字符 hh

\uhhhh

带有十六进制值 0x 的字符 hhhh

\t

制表符 ('\u0009')

\n

新行(换行)符 ('\u000A')

\r

回车符 ('\u000D')

\f

换页符 ('\u000C')

\a

报警 (bell) 符 ('\u0007')

\e

转义符 ('\u001B')

\cx

对应于 x 的控制符

字符类

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

预定义字符类

.

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

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

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

\S

非空白字符:[^\s]

\w

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

\W

非单词字符:[^\w]










 



边界匹配器

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

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

\z

输入的结尾














Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n

X{n,}

X,至少 n

X{n,m}

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












Reluctant 数量词

X??

X,一次或一次也没有

X*?

X,零次或多次

X+?

X,一次或多次

X{n}?

X,恰好 n

X{n,}?

X,至少 n

X{n,m}?

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

Possessive 数量词

X?+

X,一次或一次也没有

X*+

X,零次或多次

X++

X,一次或多次

X{n}+

X,恰好 n

X{n,}+

X,至少 n

X{n,m}+

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
















注意:

1、每个字符前边都需要加一个字符\;字符 .的写法为\\.;两个\字符的写法为\\\\。

2、组的概念:需要再次用到上一次的符号规则时用括号()括起来即可,即为封装成组;若出现叠词时规则为(.)\\1,叠词出现多次时规则为(.)\\1+;

组的应用:1、使字符串按照叠词完成切割。为了可以让规则的结果被重用。

    2、调用组的时候用符号$,后面在跟一个组号,如$2表示调用前面二号组。

    3、可以将规则封装成一个组。用()完成。组的出现都有编号。

组数从1开始。 想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取。

3、((())())这个有几组,确定组数的时候就看左括号(有几个左括号就有几组),从左往右一次是第一组,第二组……

三、常用方法

1,匹配

Boolean matches(String regex)方法。用规则匹配整个字符串,符合则返回true,只要有一处不符合规则,就匹配结束,返回false。

其实String类中的matches和replaceAll方法。用的就是Pattern和Matcher对象来完成的。只不过被String的方法封装后,用起来较为简单。功能也单一。

匹配小练习:


运行结果 :

2,切割

String[]  split(String regex);

String[]  split(String regex,int limit)

切割小练习:


运行结果:


3,替换

String replaceAll(String regex,String replacement)   如果regex中有定义组,可以在第二参数中通过$n(n为组数)符号获取正则表达式中的已有的组。

替换小练习:


运行结果:


4,获取

将字符串中的符合规则的子串取出。

4.1、Pattern属于java.util.regex

用到的Pattern中的方法:

1、static Patterncompile(String regex)  将给定的正则表达式编译到模式中。

2、Matchermatcher(CharSequence input) 创建匹配给定输入与此模式的匹配器,返回类型是:匹配器操作的引擎

4.2、用到的matcher中的方法

1、Stringgroup();  获取符合规则的字符串序列。

2、boolean  find();判读是否有符合规则的字符序列。有则返回true,否则返回false。

3、int end(); 获取符合规则子串停止位置的角标。即:指针结束的位置

4、int start();获取符合规则子串开始位置的角标。即:指针开始的位置

4.3、获取子串操作步骤

1,将正则表达式封装成对象。

2,让正则对象和要操作的字符串相关联。

3,关联后,获取正则匹配引擎。

4,通过引擎对符合规则的子串进行操作,比如取出。

获取子串小练习:


运行结果:


5、4种方法的使用情况分析

       1,如果只想知道该字符是否对错,使用匹配。

       2,想要将已有的字符串变成另一个字符串,替换。

       3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。

       4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。

正则表达式小练习:

练习1:


运行结果为 :

练习2:


运行结果为:


练习3:网页爬虫(蜘蛛)



------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值