正则表达式贪婪匹配(正则表达式 \s*和\s* 具体有什么区别求认真解答 thanks)

本文目录
- 正则表达式 \s*和\s* 具体有什么区别求认真解答 thanks
- 正则表达式里面 .* 和 .* 有什么区别
- C++11正则表达式是贪婪匹配还是非贪婪匹配
- 正则表达式的贪婪模式与非贪婪模式
- 正则表达式中,星号加问号是匹配什么(分开我知道),比如/A*/究竟匹配的是什么,请高人指点
- 正则表达式中...与
- python 正则表达式怎么匹配
- 正则表达式中,量词的贪婪模式与惰性模式有什么区别
正则表达式 \s*和\s* 具体有什么区别求认真解答 thanks
这本质就是正则表达式的贪婪与非贪婪模式
1、贪婪模式:正则表达式一般趋向于最大长度匹配。
2、非贪婪模式:反之,取最小长度匹配
3、如何区分:在量词(*
+
?
{m,n})后面加上
?
号,就是非贪婪模式
由于\s是匹配空格,不好说明,我们用下面的例子来说明:
正则表达式:
\d+
和
\d+?
字符串:asd12sd345
\d+匹配结果:12、345(尽可能多的匹配)
\d+?匹配结果:1、2、3、4、5(匹配最小数量,也就是1个)
那么,同理\s*和\s*?这俩的区别就是:
\s*:匹配0个或多个空格,会尽可能多的匹配
\s*?:匹配最小数量的空格,也就是0个空格
正则表达式里面 .* 和 .* 有什么区别
.* 是贪婪模式
.*? 是勉强模式
.*+ 是侵占模式
以下是我对这几个模式的理解:
假定要分析的字符串是xfooxxxxxxfoo
模式.*foo (贪婪模式):
模式分为子模式p1(.*)和子模式p2(foo)两个部分. 其中p1中的量词匹配方式使用默认方式(贪婪型)。 匹配开始时,吃入所有字符xfooxxxxxx去匹配子模式p1。匹配成功,但这样以来就没有了字符串去匹配子模式p2。本轮匹配失败;第二轮:减少p1部分的匹配量,吐出最后一个字符, 把字符串分割成xfooxxxxxxfo和o两个子字符串s1和s2。 s1匹配p1, 但s2不匹配p2。本轮匹配失败;第三轮,再次减少p1部分匹配量,吐出两个字符, 字符串被分割成xfooxxxxxxfo和oo两部分。结果同上。第四轮,再次减少p1匹配量, 字符串分割成xfooxxxxxx和foo两个部分, 这次s1/s2分别和p1/p2匹配。停止尝试,返回匹配成功。
模式.*?foo (勉强模式):
最小匹配方式。第一次尝试匹配, p1由于是0或任意次,因此被忽略,用字符串去匹配p2,失败;第二次,读入第一个字符x, 尝试和p1匹配, 匹配成功; 字符串剩余部分fooxxxxxxfoo中前三个字符和p2也是匹配的. 因此, 停止尝试, 返回匹配成功。在这种模式下,如果对剩余字符串继续去寻找和模式相匹配的子字符串,还会找到字符串末尾的另一个xfoo,而在贪婪模式下,由于第一次匹配成功的子串就已经是所有字符,因此不存在第二个匹配子串。
模式.*+foo (侵占模式):
也叫占用模式。匹配开始时读入所有字符串, 和p1匹配成功, 但没有剩余字符串去和p2匹配。因此, 匹配失败。返回。
***隐藏网址***
C++11正则表达式是贪婪匹配还是非贪婪匹配
//贪婪匹配,可以以该代码进行测试。不过少年你问的略有些偏门哪!
//----test.cpp----
#include 《stdio.h》
int main(){
int i=1;
int j=2;
j---i;
printf("i = %d, j = %d\n", i, j);
return(0);
}
正则表达式的贪婪模式与非贪婪模式
作为开始,我们先看下面的正则:
我们本来预想上面会匹配得到 "witch" 和 "broom" 两个字符串,运行上面的例子,却发现结果只匹配到 "witch" and her "broom" 一个字符串。
之所以出现这个结局,是因为正则的贪婪模式在起作用。
首先我们假设自己是正则引擎,来模拟搜索实现的过程。
正则引擎先从字符串的第0位开始搜索。
总结:在贪婪(默认)模式下,正则引擎尽可能多的重复匹配字符。
非贪婪模式和贪婪模式相反,可通过在代表数量的标识符后放置 ? 来开启非贪婪模式,如 ? 、 +? 甚至是 ?? 。
我们来看看非贪婪模式 .? 是怎么运转的:
总结:在非贪婪模式下,正则引擎尽可能少的重复匹配字符。
正则表达式中,星号加问号是匹配什么(分开我知道),比如/A*/究竟匹配的是什么,请高人指点
像+
*
?
以及{M,N}
这几种量词(匹配数量)默认是属于贪婪量词,进行贪婪匹配
什么叫做贪婪匹配呢?贪婪就是尽可能的多匹配,贪心的意思
比如现在目标字符串是
AAAA
四个A组成的字符串
A*
和
A+
都会匹配
AAAA
A?
则会匹配
A
这就是贪婪匹配,实际运用中,有的时候我们却希望尽可能少的匹配
比如目标字符串
a
b
此时如果我们使用了贪婪量词
.*
则会匹配
a
b
整个字符串
可是我们只想要匹配第一对span标签怎么办?此时就需要用到懒惰量词,意思也很明显了,能偷懒就偷懒,呵呵,懒惰量词与贪婪量词的差别就是在贪婪量词的后面加个?号,就构成了懒惰量词,如下表
贪婪量词
懒惰量词
A*
A*?
A+
A+?
A?
A??
A{M,N}
A{M,N}?
还是以目标字符串
AAAA
来讨论
A*?
*号是匹配0次或多次,要偷懒怎么办呢?当然是最少次数了,也就是0
所以在这里匹配的结果是
没有匹配到任何内容
A+?
+是1次或多次,分析方法同上,最少次数是1次,所以匹配结果就是
A
A??
?是0次或1次,所以这里也不进行匹配,会偷懒吧,呵呵
再来看看刚刚的
a
b
要匹配第一对span,用懒惰量词就是
.*?
我已经说的够明白了吧?这些内容我以前都是查了好多资料才知道的。
正则表达式是相当强大的语言,尤其在进行字符匹配和查找时,当然要需要花一定的时间才能掌握,如果有问题可以百度HI我,进行探讨
正则表达式中...与
正则表达式中的.*和.*?区别为:模式不同、匹配条件不同、次数不同。
一、模式不同
1、.*:.*为贪婪匹配模式。
2、.*?:.*?为最小匹配模式。
二、匹配条件不同
1、.*:.*的匹配条件为单个字符。
2、.*?:.*?的匹配条件为多个字符组成的字符串。
三、次数不同
1、.*:.*是满足条件的情况匹配任意次。用来匹配前面的子表达式任意次。
2、.*?:.*?是满足条件的情况只匹配用来匹配前面的子表达式零次或一次。
python 正则表达式怎么匹配
Python本不等于正则语言,它只是内部集成了一个正则引擎,这个引擎实现了正则语言的功能,在Python中,这个引擎就是re模块。所以,你要先‘import re’。
下面网页详细介绍了正则本身和re模块,可供参考,基本上覆盖了所有内容。
正则表达式中,量词的贪婪模式与惰性模式有什么区别
贪婪模式尽可能多的匹配
惰性模式尽可能少的匹配
如字符串"abbbbc"c贪婪模式 "+?b"匹配字符串”ab"

更多文章:
gcc编译器参数(深度linux的arm-linux-gnueabihf-gcc编译参数如何配)
2026年10月11日 19:30
asp是什么检查项目(医院血液检验项目RPR、TPPA、HIV-Ab各是什么意思)
2026年10月11日 10:20
汇编输出指令(用汇编语言循环指令在屏幕中间输出红底白字的“hello I am 720“)
2026年10月11日 07:20
本地搭建springboot项目(使用eclipse构建springboot项目)
2026年10月11日 06:20
java入门神器好用吗(java 7入门经典适合初学者自学用吗)
2026年10月11日 02:40
unix文件系统采用(Unix采用树形文件系统,其中“树形文件系统”什么意思)
2026年10月11日 00:50




