正则表达式 .*? 是什么意思啊?

作者&投稿:苌斩 (若有异议请与网页底部的电邮联系)
正则表达式@.*?@是什么意思?~

在这个正则表达式的含义为:
第一部分@:匹配@字符
第二部分.*?:匹配任意字符零次或者多次,但是尽可能少(非贪婪模式)
第三部分@:匹配@字符
测试结果如下图所示:


你也可以使用JAVA正则表达式在线测试在线尝试。

“?:”非获取匹配,匹配冒号后的内容但不获取匹配结果,不进行存储供以后使用。
单独的“?”:匹配前面的子表达式零次或一次。
当“?”紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。

扩展资料
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
参考资料来源:百度百科:正则表达式

表达式 .* 就是单个字符匹配任意次,即贪婪匹配。 表达式 .*? 是满足条件的情况只匹配一次,即最小匹配.

举例介绍:

如:<img src="test.jpg" width="60px" height="80px"/>

懒惰模式正则:

src=".*?"

结果:src="test.jpg"

扩展资料

正则表达式特殊字符及其含义:

1、\cx    

匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。    

2、\f    

匹配一个换页符。等价于 \x0c 和 \cL。    

3、
 

匹配一个换行符。等价于 \x0a 和 \cJ。    

4、    

匹配一个回车符。等价于 \x0d 和 \cM。    

5、\s    

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f
\v]。    

6、\S    

匹配任何非空白字符。等价于 [^ \f
\v]。    

7、    

匹配一个制表符。等价于 \x09 和 \cI。    

8、\v    

匹配一个垂直制表符。等价于 \x0b 和 \cK。    

参考资料:

百度百科——正则表达式



.点 匹配任何单个字符。例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。
* 匹配0或多个正好在它之前的那个字符。例如正则表达式。*意味着能够匹配任意数量的任何字符。
? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。

.* 很简单,就是一个字符循环0次或者很多次
多一个?在后面,意思是 懒惰循环
举一个例子你就明白了
对于字符串 aaaaaaa
a* 一下子很勤劳的把整个字符串都匹配完了,结果是
aaaaaaa

a*? 很懒,发现匹配字符串中一个a后,就完成了匹配,就不用再继续尝试下去了,因此就第一次只匹配
a,然后进行第二轮匹配了,还是只吃一个a就结束。因为他懒嘛

?的一个用法1楼已经说了,匹配0次或1次。
但是?还有第二个含义,作为正则的懒惰模式。
正则有两种模式,一种为贪婪模式(默认),另外一种为懒惰模式,以下为例:
(abc)dfe(gh)
对上面这个字符串使用(.*)将会匹配整个字符串,因为正则默认是尽可能多的匹配。
虽然(abc)满足我们的表达式,但是(abc)dfe(gh)也同样满足,所以正则会匹配多的那个。
如果我们只想匹配(abc)和(gh)就需要用到以下的表达式
(.*?)
在重复元字符*或者+后面跟一个?,作用就是在满足的条件下尽可能少匹配。

.点 匹配任何单个字符。
* 匹配0或多个正好在它之前的那个字符。就是0到n次
? 匹配0或1个正好在它之前的那个字符。(之前!!注意:这个元字符不是所有的软件都支持的。)
例如113366 11(.*?)66 匹配后就是33


四平市15038631332: 正则表达式(规则表达式) - 搜狗百科
五柱京瑞: 表达式 .* 就是单个字符匹配任意次,即贪婪匹配. 表达式 .*? 是满足条件的情况只匹配一次,即最小匹配. 举例介绍: 如:<img src="test.jpg" width="60px" height="80px"/> 懒惰模式正则: src=".*?" 结果:src="test.jpg" 扩展资...

四平市15038631332: 正则里的(.*?)是什么意思 -
五柱京瑞: . 是任意字符 可以匹配任何单个字符,例子:正则表达式r.t 可以匹配这些字符串:rat、rut、r t,但是不匹配root. .*? 表示匹配任意字符到下一个符合条件的字符 例子:正则表达式a.*?xxx 可以匹配 abxxx axxxxx abbbbbxxx 扩展资料:* 匹配0或多...

四平市15038631332: 正则表达式中.*是什么意思 -
五柱京瑞: *是通配符的一种,表示任意多个字符,.*则表示后缀名为任意的文件即所有文件. 希望可以帮到您.

四平市15038631332: 正则表达式<.*?>是什么意思? -
五柱京瑞: 表达式 .* 就是单个字符匹配任意次,即贪婪匹配. 表达式 .*? 是满足条件的情况只匹配一次,即最小匹配. 举例介绍: 如:<img src="test.jpg" width="60px" height="80px"/> 懒惰模式正则: src=".*?" 结果:src="test.jpg" 扩展资...

四平市15038631332: 正则表达式中 .*? 代表什么? -
五柱京瑞: 点 是任意字符* 是取 0 至 无限长度 问号 是非贪婪模式.何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:.*?a 就是取前面任意长度的字符,到底一个 a 出现,匹配如下 q@wer_qwerqweraljlkjlkjlkj 得到:q@wer_qwerqwera 这部分,如果匹配不到后面的 a 字符,则匹配为空.

四平市15038631332: 正则表达式中的 *?或 *+ 是什么意思 -
五柱京瑞: *——表示匹配前面的字符0个或多个 +——表示前面的字符1个或多个 ?——(1)放在其他字符后面表示前面的字符可以有,也可以没有 (2)放在*、+后面表示匹配尽可能少的字符 例如:字符串fooooo,正则fo*和fo+会匹配整个字符串, fo+? 匹配fo, fo*? 匹配f *+没有这样的用法,除非是匹配星号本身,即: \*+ 表示一个或多个星号

四平市15038631332: python 正则表达式.*? 是什么意思 详细解释 -
五柱京瑞: 分开来说: 1、. 匹配任意除换行符“\n”外的字符; 2、*表示匹配前一个字符0次或无限次;3、+或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复; 4、 .*? 表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复. 如:a.*?b匹配最短的,以a开始,以b结束的字符串.如果把它应用于aabab的话,它会匹配aab和ab.

四平市15038631332: 正则表达式中的 *?或 * 是什么意思 -
五柱京瑞: 乘号,乘以 请采纳,你的采纳是我上进的动力!可以追问,一直到懂!!

四平市15038631332: 正则表达式的.*?是什么意思 和() -
五柱京瑞: "."是表示匹配所有character:(Dot.) In the default mode, this matches any character except a newline. If the DOTALL flag has been specified, this matches any character including a newline. "*"是表示匹配0个或者多个 Causes the resulting RE to...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网