正则贪婪,非贪婪,分组,前瞻

1.贪婪模式

正则是:/\d{3,5}/g,字符串是 12345678

那么exec 方法或者match方法返回的结果是什么呢? 是 [123,456] 还是 [1234,5678] 还是[12345]

答案是:[12345] . 正则表达式默认是贪婪模式,即尽可能多的匹配,如果失败那么减一匹配直到最小值。在这种情况下前面5个数字匹配后,下标来到6处,678不会再匹配

2.非贪婪模式

让正则表达式尽可能少的匹配,也就是说一旦成功匹配就不在继续尝试就是非贪婪模式

只要在量词后加上?即可

‘123456789‘.match(/\d{3,5}?/g); 返回[123,456,789]

3.分组反向引用

2015-12-25 =》 12/25/2015

可以这样。$n表示对应的分组.如果没有这样的分组那么就会把$n 当成字符串处理

‘2015-12-25‘.replace(/(\d{4})-(\d{2})-(\d{2})/g,‘$2/$3/$1‘)

栗子:

‘a1b2c3d4‘.replace(/((\w\d){3})/g,‘X$1xx‘),返回结果"Xa1b2c3xxd4"

4.忽略分组(只是利用分组,但确不捕获)

不希望捕获某些分组只要在分组内加上?: 就可以

栗子:

‘sasdadsssaaaattt‘.replace(/(?:sss|ttt)/g,‘X$1X‘)

返回:
"sasdadX$1XaaaaX$1X"

4.前瞻与后顾

1.正则表达式从文本头部向尾部开始解析,这样的解析方向称为‘前‘

2.前瞻 就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻 方向相反

3.Javascript 不支持后顾

4.符合和不符合特定断言称为肯定/正向 匹配 和 否定/负向 匹配

5.语法: exp(?=assert)  正向  exp(?!assert)   负向

栗子:

‘a1b3c5‘.replace(/\w(?=\d)/g,‘X0X‘),返回:"X0X1X0X3X0X5"。 数字部分并不会被替换

‘a1b3c5‘.replace(/\w(?!\d)/g,‘X0X‘),返回: "aX0XbX0XcX0X"。 数字也是字符

时间: 2024-10-26 14:48:26

正则贪婪,非贪婪,分组,前瞻的相关文章

正则表达式中的贪婪非贪婪

近几天在做几个爬虫,分析网页url的时候,抓取总是出现问题.后来了解到是贪婪和非贪婪模式的问题. 记录一下本是想在一个html中抓取大量这种模式的href连接 <a href="http://www.xxxx.info/post/90934717083">xxxxx</a></br> 写的正则表达式为 reg = r'<a href="(.+)">' 经过Regulator分析后,下面语句也匹配了出来 href=&qu

正则进阶之,回溯, (贪婪* 非贪婪+? 独占++)三种匹配量词

正则的回溯 在正则表达式实现中,回溯是匹配过程的基本组成部分,它是正则表达式如此好用和强大的根源.然而,回溯计算代价很高,如果设计失误,将导致失控.回溯是影响整体性能的唯一因素,理解它的工作原理,以及如何减小使用频率,可能是编写高效正则表达式的关键点. 当一个正则表达式扫描目标字符串时,从左到右逐个扫描正则表达式的组成部分,在每个位置上测试能不能找到一个匹配.对于每一个量词和分支,都必须确定如何继续进行.如果是量词(如*+?或者{2,}),那么正则表达式必须确定何时尝试匹配更多的字符:如果遇到分

python 贪婪 非贪婪 匹配

python re模块还是需要重新学习. python readline 和 readlines(), readline() , read() 三者之间的区别,以前一直都不清楚,现在搞清楚是怎么回事了. readlines() 可以一起显示出整个文件,这个也是迭代显示的,需要追行显示,迭代器的指针会被消耗的. python 中的正则是匹配换行以外的所有的字符..* 是匹配不了所有的字符的.在某些情况下,我的结论是正确的,但是在某些情况下,我的结论又是错误的.刚才遇到的问题,现在终于知道是怎么回事

正则基础之——贪婪与非贪婪模式

转载自:http://blog.csdn.net/lxcnn/article/details/4756030 1        概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”.“{m,}”.“?”.“*”和“+”. 在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”

python 正则贪婪模式和非贪婪模式

贪婪模式:在表达式匹配成功的前提下,总是尽可能多的匹配字符飞天蓝模式:在表达式匹配成功的前提下,总是尽量少的匹配字符 1 # !/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import re 4 5 def test(): 6 string = "abc123456789sdsddskcas" 7 print "a(.*)c贪婪模式匹配结果:" 8 print re.findall(r"a(.*)c&quo

正则贪婪和非贪婪

? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的.非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串.例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'.

PHP正则 贪婪匹配与非贪婪匹配

$str = ".abcdeabcde"; preg_match('/a.+?e/', $str, $match); print_r($match); Array ( [0] => abcdeabcde ) -------------------------- 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配,默认情况下是贪婪模式; preg_match('/a.+?e/', $str, $match); print_r($match); Array ( [0]

js正则中的贪婪和非贪婪模式问题总结

var b="abeeee:eeeee:eeeeeab"; console.log(b.match(/e+\:e+/g));//["eeee:eeeee"]贪婪模式,只显示第一个匹配到的 console.log(b.match(/e+?\:e+?/g));//["eeee:e", "eeee:e"]非贪婪模式,从前向后查询 console.log(b.match(/e+\:(?=e+)/g));//["eeee:&q

正则表达式之 贪婪与非贪婪模式

1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”.“{m,}”.“?”.“*”和“+”. 在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: “{m,n}?”.“{m,}?”.“??”.“*?”和“+?”.