千家信息网

正则表达式中的.*,.*?,.+?的含义是什么

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章将为大家详细讲解有关正则表达式中的.*,.*?,.+?的含义是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. .*. 表示匹配除换行符 \n 之外的
千家信息网最后更新 2025年02月04日正则表达式中的.*,.*?,.+?的含义是什么

这篇文章将为大家详细讲解有关正则表达式中的.*,.*?,.+?的含义是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1. .*

. 表示匹配除换行符 \n 之外的任何单字符,*表示零次或多次。所以.*在一起就表示任意字符出现零次或多次。没有?表示贪婪模式。比如a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
又比如模式src=`.*`, 它将会匹配最长的以 src=` 开始,以`结束的最长的字符串。用它来搜索 时,将会返回 src=``test.jpg` width=`60px` height=`80px`

2. .*?

?跟在*或者+后边用时,表示懒惰模式。也称非贪婪模式。就是匹配尽可能少的字符。就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
又比如模式 src=`.*?`,它将会匹配 src=` 开始,以 ` 结束的尽可能短的字符串。且开始和结束中间可以没有字符,因为*表示零到多个。用它来搜索 时,将会返回 src=``

3. .+?

同上,?跟在*或者+后边用时,表示懒惰模式。也称非贪婪模式。就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.+?b匹配最短的,以a开始,以b结束的字符串,但a和b中间至少要有一个字符。如果把它应用于ababccaab的话,它会匹配abab(第一到第四个字符)和aab(第七到第九个字符)。注意此时匹配结果不是ab,abaab。因为a和b中间至少要有一个字符。
又比如模式 src=`.+?`,它将会匹配 src=` 开始,以 ` 结束的尽可能短的字符串。且开始和结束中间必须有字符,因为+表示1到多个。用它来搜索 时,将会返回 src=``test.jpg`。注意与.*?时的区别,此时不会匹配src=``,因为src=`` 之间至少有一个字符。

4. 示例代码

import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.jupiter.api.Test;public class TestRegx { @Test public void testRegx(){ String str = ""; String pattern1 = "src=`.*`"; String pattern2 = "src=`.*?`"; String pattern3 = "src=`.+?`"; Pattern p1 = Pattern.compile(pattern1); Pattern p2 = Pattern.compile(pattern2); Pattern p3 = Pattern.compile(pattern3); Matcher m1 = p1.matcher(str); Matcher m2 = p2.matcher(str); Matcher m3 = p3.matcher(str); System.out.println("根据pattern1匹配的结果:"); if (m1.find()) { for(int i=0; i<=m1.groupCount(); i++){ System.out.println(m1.group(i)); } } System.out.println("根据pattern2匹配的结果:"); if (m2.find()) { for(int i=0; i<=m2.groupCount(); i++){ System.out.println(m2.group(i)); } } System.out.println("根据pattern3匹配的结果:"); if (m3.find()) { for(int i=0; i<=m3.groupCount(); i++){ System.out.println(m3.group(i)); } } String[] str1 = p1.split(str); String[] str2 = p2.split(str); String[] str3 = p3.split(str); System.out.println("根据pattern1切分的结果"); for (int i=0; i< str1.length; i++) { System.out.println(str1[i]); } System.out.println("根据pattern2切分的结果"); for (int i=0; i< str2.length; i++) { System.out.println(str2[i]); } System.out.println("根据pattern3切分的结果"); for (int i=0; i< str3.length; i++) { System.out.println(str3[i]); } }}

5. 示例结果

关于"正则表达式中的.*,.*?,.+?的含义是什么"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

字符 模式 结果 字符串 贪婪 搜索 最长 尽可能 篇文章 含义 正则 表达式 懒惰 成功 前提 多个 意味 数量 是在 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 信息网络安全 创刊年 公司有多名软件开发人员 微乐登陆说当前服务器繁忙 网络技术计算机四级 腾讯云服务器安装教学 明日之后可以删除玩过的服务器吗 HTAP数据库技术成熟吗 软件开发财务 坚决防止发生重大网络安全事件 数据库中隐藏某一字段 openssl 信任服务器 网络安全与执法 计算机大类 2013足球经理数据库 灵动时空网络技术 嵌入式软件开发最难的是什么 图书馆数据库的连接 做软件开发的怎么兼职 普通电脑安装win服务器系统 软件开发成本管理系统设计 为什么超凡先锋进不可以选服务器 天融信隔离网闸数据库同步配置 公司企业网络安全应急预案 软件开发工时管理办法 事业单位谁主管网络安全 杭州手机应用软件开发流程 联通网络技术大会 php操作数据库类 数据库索引结构种类 坦克世界哪个服务器玩的人最多 人人参与网络安全共享
0