java正则表达式 匹配次数,[正则表达式]基础工具书篇 匹配次数

本文详细介绍了正则表达式中如何通过元字符来指定匹配次数,包括可选匹配、任意次匹配、至少一次匹配及具体次数匹配的方法。同时探讨了贪婪模式与非贪婪模式的区别及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*. 分组

说匹配次数之前,先说说其他的。

使用圆括号 ( ) 包裹字符内容,使其变成一个子表达式,执行匹配后,除了总匹配结果,子表达式匹配结果也会存入内存。

这里括号的作用和四则运算中括号中的作用差不多,括号内的运算具有更高的优先级,并作为一个整体参与匹配运算。

1.用元字符确定匹配次数

通过在单个字符或一个子表达式的后方,紧跟表示匹配次数的元字符,确定这个字符或者子表达式应当连续匹配的次数。1. ?

? 表示匹配0次或者1次,即要匹配的内容可有可无。

例如正则表达式 (www\.)?sss.com,既可以匹配字符串 www.sss.com,也可以匹配 sss.com。2. *

* 表示匹配0次或者多次,即匹配多少次都行。

例如正则表达式 ax*b,可以匹配字符串 ab、 axb、 axxxxb、 axxxxxxxxxxxb等。3. +

+ 表示匹配1次或者多次,即匹配多少次都行,但是至少得有一次。

例如正则表达式 ax+b,可以匹配字符串 axb、 axxxxb、 axxxxxxxxxb等,但是不能匹配 ab。4. 花括号

使用花括号包裹自然数,来表示匹配的次数({m})。可以在两个自然数中间加上逗号来表示匹配两个数的区间范围({m, n})。

如果花括号内只有第一个自然数和一个逗号,则表示匹配 >= 第一个数的次数({m,})。

例如:

ce{3}b 只可以匹配字符串 ceeeb,

ce{1,3}b 只可以匹配字符串 ceb、 ceeb、 ceeeb,

ce{3,}b 可以匹配字符串 ceeeb、 ceeeeeeeb、 ceeeeeeeeeeeeeeeb等,但不能匹配字符串ceb、 ceeb。

2.贪婪模式与非贪婪模式

在一个正则表达式中,一个字符对应的字符集越大,则满足匹配的情况就越多。如果这个字符的匹配次数越大,那么字符串中满足匹配的情况就越多。这个时候,最终的匹配结果应该如何选择呢?

比如,用正则表达式 a.*b 去匹配字符串 abccbxxb,匹配结果应该是 ab、 abccb 还是 abccbxxb?

这个时候,需要根据贪婪模式或者非贪婪模式去判断。

贪婪模式(默认模式),就是说,在满足正则匹配的情况下,取字符数最多的那个结果。

非贪婪模式,即反之,取字符数最少的那个结果。使用方法为,在表示匹配次数的元字符后加上一个 ?。

根据上面的概念,之前的问题,答案应该是 abccbbxxb。

如果想要使用非贪婪模式来匹配出 ab,则应该修改正则表达式为 a.*?b。

我们来看一个更贴近现实的例子。我们要取出一段HTML中a标签所包含的链接。

假设这段HTML为:

如过我们使用正则表达式 ".*" 去匹配,则结果为 "a.com">

因此,应该使用 ".*?"去匹配,结果为 "a.com"。这时,正确匹配到a标签中包含的链接(虽然有两个引号的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值