贪婪,非贪婪和占有量词的区别
来源:互联网 发布:js获取当前页面大小 编辑:程序博客网 时间:2024/06/02 23:24
-- Start
--更多参见:正则表达式精萃我们在 量词 一节中介绍了什么量词以及贪婪与非贪婪量词之间的区别。事实上,通常正则表达式支持以下三种量词。
贪婪量词非贪婪量词占有量词匹配X? X??X?+匹配X 0次或1次X* X*?X*+匹配X 0次或无数次X+ X+?X++匹配X 1次或无数次X{n} X{n}?X{n}+匹配X n次X{n,} X{n,}?X{n,}+匹配X 至少n次X{n,m} X{n,m}?X{n,m}+匹配X 至少n次至多m次 那它们之间有什么区别呢? 下面我们通过一个简单的例子来考察贪婪与非贪婪之间的区别。
#!/usr/bin/perlmy $testText = "abbbb"; # 测试文本# 测试贪婪量词if($testText =~ m/(ab*)/) { print "ab* 匹配了 $1\n";}# 测试非贪婪量词if($testText =~ m/(ab*?)/) { print "ab*? 匹配了 $1\n";}
结果如下:ab* 匹配了 abbbbab*? 匹配了 a看到它们之间的区别了吗?现在你应该知道了贪婪与非贪婪的真正含义了吧。
下面我们通过一个简单的例子来考察一下什么是占有量词。
#!/usr/bin/perlmy $testText = "<abbbb>"; # 测试文本# 测试贪婪量词if($testText =~ m/(<.*>)/) {print "<.*> 匹配了 $1\n";}# 测试非贪婪量词if($testText =~ m/(<.*?>)/) {print "<.*?> 匹配了 $1\n";}# 测试占有量词if($testText =~ m/(<.*+>)/) {print "<.*+> 匹配了 $1\n";} else {print "<.*+> 无法匹配 <abbbb>\n";}
结果如下:<.*> 匹配了 <abbbb><.*?> 匹配了 <abbbb><.*+> 无法匹配 <abbbb>
要想理解什么是占有量词,我们必须深入正则表达式的匹配原理,我们先来了解一下 <.*> 是如何匹配 <abbbb>的。1. 首先 < 匹配字符串中的 <
2. 接着 . *会匹配字符剩余的所有字符,也就是 abbbb>
3. 接着是 >,但是此时,字符串中的所有字符已经被.* 匹配了,为了使整个表达式匹配成功,.* 必须吐出一个字符,吐出之后,表达式会判断 > 能否匹配那个吐出的字符,如果不能,它会再吐出一个字符进行判断,我们把这一过程称为回溯。.* 和 .*+ 的唯一区别是,.* 会吐出字符而 .*+ 在任何时候都不会吐出字符,一旦吃的嘴里,想让它往出吐,门儿都没有,这就是占有的真正含义。
-- 声 明:转载请注明出处
-- Last Updated on 2012-05-13
-- Written by ShangBo on 2012-05-12
-- End
- 贪婪,非贪婪和占有量词的区别
- Java 正则表达式中量词的贪婪型,勉强型和占有型讲解
- Python 正则表达式里面 贪婪模式和非贪婪模式的区别
- 正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
- 正则表达式的贪婪匹配和非贪婪匹配
- python re的贪婪和非贪婪匹配
- 正则表达式的贪婪匹配和非贪婪匹配
- 正则表达式中数量词的贪婪和非贪婪
- Python正则表达式的贪婪模式和非贪婪模式
- js正则表达式的贪婪匹配和非贪婪匹配
- Python 数量词(*+?)的贪婪模式和非贪婪模式
- [JS]正则量词的贪婪、惰性
- 贪婪匹配和非贪婪匹配
- 正则表达式-贪婪和非贪婪
- 正则表达式的贪婪与非贪婪
- 正则表达式的贪婪与非贪婪
- 正则的贪婪与非贪婪模式
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- C++定时器的简单例子
- just a share
- 条件判断
- Hope you never grow old.
- python,flash记录
- 贪婪,非贪婪和占有量词的区别
- Error:There is no Action mapped for namespace [/] and action name [helloword]
- SQL Server中字段数据类型char nchar varchar nvarchar的区别
- Centos6.2 小问题
- VS2008所有TAB键换成4个空格
- latin1详解
- nginx代理IIS轻松实现支持JSP,PHP,ASP平台
- 王亚伟:我为什么离职
- Centos 安装JDK