正则表达式

1.正则表达式是什么?
正则表达式是一个强大的字符串处理工具。

2.正则表达式有什么用?
可以对字符串进行查找、提取、分割、替换等操作。

3.String类里也提供了如下几个特殊的方法:
①boolean matches(String regex):判断该字符串是否匹配指定的正则表达式。
②String replaceAll(String regex, String replacement):将该字符串中所有匹配regex的子串替换成replacement。
③String replaceFirst(String regex, String replacement):将该字符串中第一个匹配regex的子串替换成replacement。
④String[] split(String regex):以regex作为分隔符,把该字符串分割成多个子串。
除此之外,Java还提供了Pattern和Matcher两个类专门用于提供正则表达式支持。

4.Java字符串中反斜杠本身需要转义,因此两个反斜杠(\)实际上相当于一个(前一个用于转义)。

5.正则表达式的字符:
①合法字符:
x:字符x(x可代表任何合法的字符)。
\0mnn:八进制数0mnn所表示的字符。
\0xhh:十六进制0xhh所表示的字符。
\uhhhh:十六进制0xhhhh所表示的Unicode字符。
\t:制表符(’\u0009’)。
\n:新行(换行)符(’\u000A’)。
\r:回车符(’\u000D’)。
\f:换页符(’\u000C’)。
\a:报警符(’\u0007’)。
\e:Escape符(’\u001B’)。
\cx:x对应的控制符。例如,\cM匹配Ctrl+M。x值必须为A~Z或a~z之一。
②特殊字符:正则表达式有一些特殊字符,有其特殊的用途,比如反斜线(“\”)。如果需要匹配这些字符,就必须首先将这些字符转义,也就是在前面添加一个反斜线(“\”)。

$:匹配一行的结尾。
^:匹配一行的开头。
():标记子表达式开始和结束的位置。
[]:确定中括号表达式开始和结束的位置。
{}:标记子表达式出现的频度。
*:0次或多次。
+:1次或多次。
?:0次或1次。
.:匹配除换行符"\n"之外的所有单个字符。
\:用于转义下一个字符。
|:指定两项之间任选一项。

③预定义字符:“通配符”是可以匹配多个字符的特殊字符。正则表达式中的“通配符”远远超出了普通通配符的功能,它被称为预定义字符。
.:可以匹配所有字符
\d=digital(数字):匹配0~9所有数字。
\s=space(空白):匹配空白字符,包括空格、制表符、回车符、换页符、换行符。
\w=word(单词):匹配0~9数字、a-z、A-Z、下划线(“_”)。
D、S、W:匹配与之对应小写相反的。
④方括号表达式:
表示枚举:[abc],表示abc的任一个字符。
表示范围-:[a-f],表示a-f的任一个字符。
表示求否^:[^abc]表示非a、b、c的任一字符。[^a-f]表示非a-f的任一字符。
表示与运算&&:[a-z&&[def]]表示a-z和def的交集,即d、e、f。
表示并运算:[a-d[m-p]]表示[a-dm-p]。???不理解
⑤边界匹配符:
^:行的开头
$:行的结尾
\b:单词的边界
\B:非单词的边界
\A:输入的开头
\G:前一个匹配的结尾
\Z:输入的结尾,仅用于最后的结束符
\z:输入的结尾

6.正则表达式还提供了数量标识符,正则表达式支持的数量标识符有如下几种模式:
①Greedy(贪婪模式):数量表示符默认采用贪婪模式,除非另有表示。贪婪模式的表达式会一直匹配下去,直到无法匹配为止。
②Reluctant(勉强模式):用问号后缀(?)表示,它只会匹配最少的字符。也称为最小匹配模式。
③Possessive(占有模式):用加号后缀(+)表示,目前只有Java支持占有模式,通常比较少用。

7.一旦在程序中定义了正则表达式,就可以使用Pattern和Matcher来使用正则表达式了。

8.Pattern对象:
①Pattern对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译为Pattern对象,然后再利用该Pattern对象来创建对应的Matcher对象。执行匹配
所涉及的状态保留在Matcher对象中,多个Matcher对象可共享同一个Pattern对象。
②Pattern是不可变类,可供多个并发线程安全使用。
③Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();
或直接一条语句 boolean b = Pattern.matches(“a*b”, “aaaaab”);

9.Matcher类提供了如下几个常用的方法:
①find():返回目标字符串中是否包含与Pattern匹配的子串。
②group():返回上一次与Pattern匹配的子串。
③start():返回上一次与Pattern匹配的子串在目标字符串中的位置。
④end():返回上一次与Pattern匹配的子串在目标字符串中的结束位置加1。
⑤lookingAt():返回目标字符串前面部分与Pattern是否匹配。
⑥matches():返回整个目标字符串与Pattern是否匹配。
⑦reset():将现有的Matcher对象应用于一个新的字符序列。

10.使用正则表达式可以提取网页上的电话号码,也可以提取邮件地址等信息。如果程序再进一步,可以从网页上提取超链接信息,再根据超链接打开其他网页,然后在其他网页
上重复这个过程就可以实现简单的网络爬虫了。

11.实际上,String类中也提供了replaceAll()、replaceFirst()、split()等方法。

12.匹配所有中文字符:[\u0041-\u0056]因为所有的中文字符的Unicode值是连续的,只要找出所有中文字符中最小、最大的Unicode值,就可以利用上面形式来匹配所有中文
字符。

13.正则表达式是一个功能非常灵活的文本处理工具,增加了正则表达式支持后的Java,可以不再使用StringTokenizer类(也是一个处理字符串的工具,但功能远不如正则表达式
强大)即可进行复杂的字符串处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值