正则表达式(vim版)非贪婪匹配释疑
2015-05-10 00:57
260 查看
本以为自己虽然并没有特别精通正则表达式,但是基本的用法还是没有问题.但是最近遇到一个问题还是让我捉襟见肘,在此感谢大牛哥的指导.
首先我们大致了解一下正则表达式.
元字符:
. 任意字符
^ 行首
$ 行尾
+ 一到多个紧跟在其前面的字符的个数
? 0到1个紧跟其前面的字符
* 0到多个紧跟其前面的字符
{} 紧跟其前面的字符的个数,可选方式有.{N}, {N,M}, {N,},分别表示出现N次,出现N到M次,出现N到多次.
OK,有了上面的这个简要说明,下面的问题就不难理解了.
情景复现,首先看一下源文件大致的布局:
最初的正则表达式:
/<animal .*name=".\{-}"\s\/>
本以为这这个表达式可以,没想到结果却是这样的.
这个结果的确让人始料未及.我使用了是贪婪匹配.不应该仅仅匹配第二行才对嘛.
其实这里存在一个问题.正则表达式的原则是匹配.所有其它原则都是建立在这个基础上面的.所以我们可以看一下第三是否匹配.答案是匹配.且仅有这一种匹配情形.
既然只有一种匹配情形,就谈不上非贪婪了.所谓非贪婪,是建立在匹配的基础上面的.
明确了问题,我们想想该怎么解决这个问题呢.
/<animal.*name="[^"]\{-}" \/>
使用上面这段作为正则表达式进行匹配,就可以达到预期的目的.因为限定了""之间最短匹配的内容之中不能有"
这一次对于正则表达式的使用经历还是之前没有过的.完全不懂得怎么分析这个问题,不过好在得到了前辈的指导.不仅解决了这个问题.也理解了这个问题.希望这篇心得可以帮助到你.
首先我们大致了解一下正则表达式.
元字符:
. 任意字符
^ 行首
$ 行尾
+ 一到多个紧跟在其前面的字符的个数
? 0到1个紧跟其前面的字符
* 0到多个紧跟其前面的字符
{} 紧跟其前面的字符的个数,可选方式有.{N}, {N,M}, {N,},分别表示出现N次,出现N到M次,出现N到多次.
OK,有了上面的这个简要说明,下面的问题就不难理解了.
情景复现,首先看一下源文件大致的布局:
<animals exp="bird"> <animal fly="1" swim="1" name="3" /> <animal fly="1" swim="1" name="3" cmdid=""/> <animal fly="1" swim="1" name="1" cmdid=""/> </animals>在这段代码中,我想要animal中找到不含cmdid的字段.显然这里面只有一行是满足要求的.
最初的正则表达式:
/<animal .*name=".\{-}"\s\/>
本以为这这个表达式可以,没想到结果却是这样的.
这个结果的确让人始料未及.我使用了是贪婪匹配.不应该仅仅匹配第二行才对嘛.
其实这里存在一个问题.正则表达式的原则是匹配.所有其它原则都是建立在这个基础上面的.所以我们可以看一下第三是否匹配.答案是匹配.且仅有这一种匹配情形.
既然只有一种匹配情形,就谈不上非贪婪了.所谓非贪婪,是建立在匹配的基础上面的.
明确了问题,我们想想该怎么解决这个问题呢.
/<animal.*name="[^"]\{-}" \/>
使用上面这段作为正则表达式进行匹配,就可以达到预期的目的.因为限定了""之间最短匹配的内容之中不能有"
这一次对于正则表达式的使用经历还是之前没有过的.完全不懂得怎么分析这个问题,不过好在得到了前辈的指导.不仅解决了这个问题.也理解了这个问题.希望这篇心得可以帮助到你.
相关文章推荐
- vim下正则表达式的非贪婪匹配
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线:
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,倒数第二列, 匹配任意一个字符 :
- python非贪婪、多行匹配正则表达式
- VIM中正则的非贪婪匹配
- 正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
- javascript正则表达式之最长匹配(贪婪匹配)和最短匹配(懒惰匹配)
- 正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
- 正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
- Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
- Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
- 正则表达式-贪婪与非贪婪匹配
- 正则表达式-贪婪与非贪婪匹配
- 正则表达式笔记 3 贪婪、勉强、独占三种匹配量词
- javascript正则表达式之匹配任何字符和非贪婪匹配
- 正则表达式--递归匹配与非贪婪匹配
- php正则表达式中的非贪婪模式匹配的使用
- Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
- python 正则表达式的贪婪匹配与非贪婪匹配
- 正则表达式中的贪婪与非贪婪匹配模式