Java网络爬虫--正则表达式之详解贪婪、逐步、独吐量词
来源:互联网 发布:淘宝自动生成手机详情 编辑:程序博客网 时间:2024/06/16 06:33
除过正则表达式的基本概念与特性还有使用方法之外,我们在解析html的时候,如果要进行字符串的匹配,必须还要熟悉正则表达式之中量词的使用法则,今天我们就来谈谈贪婪、逐步、独吐这三种量词的使用。
贪婪量词
我们先来看一下经常使用的贪婪量词都有哪些:
- X?: X项目(项目也可以理解为X代表的变量,项目比较准确)出现一次或没有。
- X*: X项目出现0次或多次。
- X+: X项目至少出现1次。
- X{n}: X项目出现n次。
- X{n, }: X项目至少出现n次。
X{n, m}: X项目出现n次但不超过m次。
下来我们解释贪婪量词为何贪婪。当我们使用贪婪量词进行字符串匹配的时候,如果比较器(Matcher)看到贪婪量词,会将剩下的字符串全部吃掉,然后从字符串的末尾一个个再吐出来,在这个过程中,它还会将吐出来的字符与规则表达式进行比较,如果吐出来的字符串符合规则表达式,而吃下的字符串也符合贪婪量词那么就比较成功,我们可以预想到,贪婪量词之所以贪婪,就是因为它会尽可能的找出长度最长的符合文字。
举个例子:
文字:xfooxxxxxxfoo,使用规则表达式 “.*foo“比较,当碰见贪婪量词 ” .×” (*da不出来~~),比较器会吃掉剩下的字符串,在这个例子中也就是整个字符串,然后比较器再从后向前一个个将字符吐出来,当吐出foo的时候,foo符合贪婪量词之后的规则表达式,而剩下没吐的字符串也符合贪婪量词的部分,所以就匹配到了整个字符串,所以它尽可能的找出长度最长的符合文字。(“.”代表任一字符)
逐步量词
逐步量词也称非贪婪量词或懒惰量词,顾名思义,它和贪婪量词是相对的,它的形式是在贪婪量词之后加上“?”,形如:“.*?”,在使用逐步量词时,比较器会一边吃掉剩余文字,一边看吃下的文字是否符规则表达式,结果就是逐步量词会找出长度最短的符合文字。
还是上面的例子:
文字:xfooxxxxxxfoo,使用规则表达式 “.×?foo”比较,当碰见逐步量词 “ .×?” (*da不出来~~),比较器会边吃文字边比较而不会一下将剩余的文字全部吃掉,所以第一个匹配到的字符串就是“xfoo”,第二个匹配到的字符串就是“xxxxxxfoo”,所以它尽可能的找出长度最短的符合文字。
独吐量词
在贪婪量词之后加上“+”,形如:“.*+”就是一种独吐量词,在使用独吐量词的时候,如果比较器看到独吐量词,它会将剩下的字符串全部吃掉,然后和贪婪量词相反,它不会吐出文字和剩下的规则表达式比较,而是会将吃下的文字和独吐量词进行比较,如果吃下的字符串符合独吐量词,那么它将不会将吃下的字符串吐出。
依然是上面的例子:
文字:xfooxxxxxxfoo,使用规则表达式 “.+foo”比较,当碰见独吐量词 “ .×+” (*da不出来~~),比较器会吃掉剩下的字符串,在这个例子中也是整个字符串,然后它发现吃下的整个字符串已经满足独吐量词“.+foo”,所以它就不会将字符串再吐出,然后会因为没有剩余的字符串符合剩下的规则表达式“foo”而产生没有找到相匹配的字符串的情况,最后的结果就是没有任何文字符合。
- Java网络爬虫--正则表达式之详解贪婪、逐步、独吐量词
- java 正则表达式量词
- 正则表达式 捕获组,向前引用,零宽度断言,贪婪量词,惰性量词以及支配量词
- 正则表达式 捕获组,向前引用,零宽度断言,贪婪量词,惰性量词以及支配量词
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- Java 正则表达式中量词的贪婪型,勉强型和占有型讲解
- 正则表达式中量词贪婪型和勉强型的讨论(Java语言描述)
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- Java正则表达式中量词贪婪型,勉强型,占有型简单描述
- 正则表达式之常用量词
- 正则表达式之常用量词
- 正则表达式知识详解之贪婪模式和非贪婪模式 (java版示例)
- 正则表达式中的贪婪、惰性、支配性的量词
- 正则表达式学习笔记贪婪、惰性和支配量词
- javascript正则表达式 贪婪、惰性和支配量词
- 正则表达式之--贪婪与非贪婪模式详解
- 正则表达式之--贪婪与非贪婪模式详解
- 关于正则表达式中贪婪量词与懒惰量词的形象解释
- Wampserver主机服务配置方法
- POJ 1586 Three Sides Make a Triangle 笔记
- easybcd安装win10和Ubuntu双系统
- ubuntu安装
- Step7:material design的基本介绍以及安装
- Java网络爬虫--正则表达式之详解贪婪、逐步、独吐量词
- 《Unix环境高级编程》第二版
- POJ1458————Common Subsequence
- ubuntu17.04配置opencv3.20(包括contrib)(支持C++,Python3)
- C# 选项、单选、多选、分组、MDI窗体的设计、PictureBox
- 阿里物联网套件-服务端SDK学习实践(基础篇-11发消息到指定的Topic)
- c++算法之回溯 素数环(一)
- 如何配置EditPlus中Java运行环境,运行Java程序
- SQL内置函数