正则表达式 量词优先

量词是优先匹配的,也就是说,量词会尽量地吃,直到由于吃得太多,导致后面没法匹配,才吐出来一个。

举例来说,文本ab1cd2,正则表达式 .*[0-9]

匹配过程:*一直吃到2,发现坏了,数字没法匹配了,于是突出2,匹配成功,结束。也就是说.*匹配了ab1cd

如果我想让.*[0-9]匹配ab1cd2两次,怎么办?

忽略量词优先,.*?[0-9],量词后面加一个问号。也就是说,让*尽量地少吃。

匹配过程:*不吃,不吃不行啊,a不能匹配数字,于是吃下a,b不能匹配数字,于是再吃下b,1匹配数字,结束。开始下一个匹配。

时间: 2024-10-30 23:05:47

正则表达式 量词优先的相关文章

正则表达式——量词

[量词],顾名思义就是用来匹配数量的.类似于\w,\d,[0-9]这样的元字符都只能匹配一个字符,如果要匹配多个字符就要输入此元字符多次,这样使用起来就很麻烦.所以正则表达式中使用了量词来进行[元字符]的数量的匹配,通过操作量词,可以匹配0个元字符,也可以匹配无数个元字符.在正则表达式中的量词分为三种,匹配优先量词(标准量词).忽略优先量词.占有优先量词.此文着重描述匹配优先量词(标准量词),这类量词是在所有的正则表达式工具中都支持的量词,而忽略优先量词和占有优先量词则只在一部分正则工具中支持.

java正则表达式-量词

正则表达式-量词1概述所谓量词,可以理解为用来描述某个字符(字符组)重复出现的次数.举个例子,11位数的电话号码,如果不考虑前三位的固定组合,用正则表达式写成:\d\d\d\d\d\d\d\d\d\d\d其中d重复了11次,十分不方便,所以就引入了量词,上式可以轻松地写成:\d{11}量词也支持对长度描述范围,形如{m,n} m和n分别是两个整数,相当于数学中的[m,n],例如\d{1,11},表示这个数字字符串的长度最短1个字符,最长11个字符. [注意]{m,n}的n省略写成{m,} 表示字

正则表达式量词

/* 量词 什么是量词 出现的次数 {n,m},至少出现n次,最多出现m次 例子:查找QQ号 常用量词 {n,}至少n次 * 任意次 {0,} ? 零次或一次 {0,1} + 一次或任意次 {1,} {n} 正好n次 * */ var oInput=document.getElementsByTagName('input'); //[1-9]qq号第一位为1-9之间的数字 //^:在正则的最开始位置,就代表起始的意思 //$:在正则的最后位置,就代表结束的意思 var re=/^[1-9]\d{

Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】

1.Greediness(贪婪型):最大匹配X?.X*.X+.X{n,}都是最大匹配.例如你要用“<.+>”去匹配“a<tr>aava</tr>abb”,也许你所期待的结果是想匹配“<tr>”,但是实际结果却会匹配到“<tr>aava</tr>”.这是为什么呢?下面我们跟踪下最大匹配的匹配过程.①“<”匹配字符串的“<”.②“.+”匹配字符串的“tr>aava</tr>ab”,在进行最大匹配时,它把两个“

匹配优先存在的问题,以及解决办法

1.匹配优先存在的问题,考虑下面的情况: The name "dumpling" is said "jiaozi" in Chenese.  我们想要匹配 双引号引起来的单词,这里也就是 dumpling和jiaozi. 使用 ".*" ,出现什么问题? "匹配第一个双引号,.* 量词优先匹配,一直吃下去,迟到最后的e,导致后面匹配失败(也就是全局匹配失败),因此要吐出来,一次吐出一个,尝试一下,失败了再吐出一个,直到jiaozi&qu

正则表达式前端使用手册

导读 你有没有在搜索文本的时候绞尽脑汁, 试了一个又一个表达式, 还是不行. 你有没有在表单验证的时候, 只是做做样子(只要不为空就好), 然后烧香拜佛, 虔诚祈祷, 千万不要出错. 你有没有在使用sed 和 grep 命令的时候, 感觉莫名其妙, 明明应该支持的元字符, 却就是匹配不到. 甚至, 你压根没遇到过上述情况, 你只是一遍又一遍的调用 replace 而已 (把非搜索文本全部替换为空, 然后就只剩搜索文本了), 面对别人家的简洁高效的语句, 你只能在心中呐喊, replace 大法好

24 正则表达式 re模块

一.正则表达式 1.字符组 ① [abc] 匹配a或b或c ②  [a-z] 匹配a到z之间的所有字? [0-9]匹配所有阿拉伯数字 2.元字符 3.量词 4.重要搭配 ①  .*? ②  .*?x        找到下?个x为     ③  (?: 正则表达式)    非优先 5.分组 在正则中使?()进?分组. ?P<name>      对分组进行起名字 6.转义 r"正则表达式" 二.   re模块 1. findall 查找所有. 返回list .findall(

python之路---24 正则表达式 re模块

一.正则表达式 1.字符组 ① [abc] 匹配a或b或c ②  [a-z] 匹配a到z之间的所有字? [0-9]匹配所有阿拉伯数字 2.元字符 3.量词 4.重要搭配 ①  .*? ②  .*?x        找到下?个x为     ③  (?: 正则表达式)    非优先 5.分组 在正则中使?()进?分组. ?P<name>      对分组进行起名字 6.转义 r"正则表达式" 二.   re模块 1. findall 查找所有. 返回list .findall(

Java正则表达式教程及示例

本文由 ImportNew - ImportNew读者 翻译自 journaldev.欢迎加入翻译小组.转载请见文末要求. [感谢 @CuGBabyBeaR  的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试投递到 ImportNew.] 当我开始我的Java职业生涯的时候,对于我来说正则表达式简直是个是梦魇.本教程旨在帮助你驾驭Java正则表达式,同时也帮助我复习正则表达式. 什么是正则表达式? 正则表达式定义了字符串的模式.正则表达式可以用来搜索.编辑或处理文本.正则表达式并不仅限于某