零度非安全 发表于 2017-2-9 15:11:31

【Java正则表达式】02. 探讨字符边界匹配及匹配模式问题

本帖最后由 零度非安全 于 2017-4-11 12:12 编辑

在 上一讲,我们谈了 Java 正则表达式中的量词、贪婪模式(默认)以及非贪婪模式,你只要把它想象成一条贪吃蛇,

给定范围,有多少它就吃多少,如果忘了可以点上一讲再看一遍消化下,把它转化为自己的东西,学习是自己的事,得一步

一个脚印来,只要把基础打扎实了,那到后面做小项目的时候就轻松了,比如最后我要讲爬虫,但要把正则学完,并且配合

【Java 教程(原创)】系列 的基础知识来实现爬虫,是不是很期待呀?那还等什么,跟着非安全哥哥脚步来,包你爽到

底。我们就此打住,下面我给大家讲下正则表达式中的字符边界匹配及匹配模式问题。

在字符边界里头匹配的不是字符而是位置哟(这点大家一定要记住 ^_^),是匹配符合某种条件的位置。在这里把涉及此

的一些特殊符号列举出来,如下


特殊字符代表的含义
^与字符串开始的地方匹配
$与字符串结束的地方匹配
\b匹配一个单词的边界

说明:“ \b ”匹配这样一个位置,前面的字符和后面的字符不全是 “ \w ”。

各位不急,在这我先拿“ ^ ”这个来做测试,按照上方给的提示“与字符串开始的地方匹配”,测试如下



两者一对比,那么结果就显而易见了,但还是要说明下在这里的“ ^ ”和在中括号里的“ ^ ”,这两者是不同的,中括号

里的“ ^ ”代表取反的意思,在 00 讲已经测试过了,在这就不测试了,忘记的鱼油要再去看 00 讲哟 ^_^!!!假如文本

里最后一个是字符“ I ”,我其它“ I ”不要,我就要最后一个,那我们可以这么来写正则表达式“ I$ ”,测试如下



最后来说下最后一个特殊符号“ \b ”,匹配一个单词的边界,在表格的下面也对这个边界补充了下,“ \b ”匹配这样一

个位置,前面的字符和后面的字符不全是 “ \w ”,我们知道“ \w ”是匹配任意一个字母或数字或下划线,也就是

A~Z,a~z,0~9,_ 中任意一个,测试如下



因为最后 3 个 “ fishc ”字符串里的字符“ c ”可以用“ \w ”来表示以及紧跟它后面这个字符也可以用“ \w ”来表示,

所以它们被无情的抛弃了,只留下第一个字符串“ fihsc ”。

字符边界匹配问题就说到这,下面重点来了,说下正则表达式中的匹配模式问题。

正则表达式的匹配模式(3 种)问题:

1. 忽略大小写模式:匹配时忽略大小写,但在默认情况下,正则表达式是要区分大小写的。

2. 单行模式:整个文本看成一个字符串,只有一个开头和一个结尾,小数点匹配包括换行符在内的任意字符。

3. 多行模式:每行都是一个字符串,都有开头和结尾,在指定多行模式情况下,如果需要仅匹配字符串开始和

结束位置,可以用“ \A ”和“ \Z ”。

一些软件中我们可以设置这 3 种模式,以后用到的东西以后再学。

我们来看下第一个模式:忽略大小写模式,注意下图的操作



你只需要在 RegexBuddy 第二栏菜单按下“Case insensitive”就切换到了忽略大小写模式了。

第二个模式为单行模式,这个模式你就把整个文本当做是一个大字符串,这个大字符串又由许多小字符串组成。正则表达式

“ ^I ”就能体现这个单行模式。

第三个模式为多行模式,我们还是来看下操作图,注意



你只需要在 RegexBuddy 第二栏菜单按下“^$ match at line breaks”就切换到了多行模式了。

如果在多行模式下,你非得匹配第一个“ I ”,那么就需要这么做了,在前面加“ \A ”,如下



如果在多行模式下,你非得匹配最后一个“ I ”,那么就需要这么做了,在后面加“ \Z ”,如下



下一节将介绍正则表达式中的分支结构、捕获组、非捕获组与反向引用。

【Java正则表达式】03. 分支结构、捕获组、非捕获组与反向引用

sunnychou 发表于 2017-3-16 15:51:59

楼主总结的非常棒,大赞,会一直支持

零度非安全 发表于 2017-3-16 16:02:25

sunnychou 发表于 2017-3-16 15:51
楼主总结的非常棒,大赞,会一直支持

蟹蟹 sunnychou 这位童鞋的滋瓷!!!

sunnychou 发表于 2017-3-17 10:21:38

零度非安全 发表于 2017-3-16 16:02
蟹蟹 sunnychou 这位童鞋的滋瓷!!!

{:5_91:}蟹蟹你才对,
页: [1]
查看完整版本: 【Java正则表达式】02. 探讨字符边界匹配及匹配模式问题