正则表达式中问号的用法

article/2025/10/8 6:28:05

1、需求背景

由于最近工作需要,要从网页链接中找到网页中有用的博客内容,大家都知道,基本使用正则表达式来匹配是最简单的一种做法,而一般都是div中有div,怎么才能匹配到那些内容的div而不是一直匹配到最后面的div呢?可能这样表述不是很清楚,下面看一下代码就知道怎么回事了

2、具体描述

<div id="article_details" class="details">
<div id="article_content" class="article_content">
错误:1488 SQLSTATE: HY000 (ER_REORG_PARTITION_NOT_EXIST) 消息:重组的分区数超过了已有的分区数。
</div>
</div>
怎么才能匹配到中间的div配对标签呢?经查询资料发现,在java中如果使用*来匹配的话,有一种贪婪匹配原则,就是如果你使用这个正则表达式来匹配的话<div class='1230'>.*</div>,那么肯定会匹配到最后面那个</div>才会结束,代码如下

public static void main(String[] args) {// TODO Auto-generated method stub// 创建包String str = "<div id=\"article_details\" class=\"details\"><div id=\"article_content\" class=\"article_content\">错误:1488 SQLSTATE: HY000 (ER_REORG_PARTITION_NOT_EXIST) 消息:重组的分区数超过了已有的分区数。</div></div>";String regex = "<div id=\"article_content\" class=\"article_content\">.*</div>";Pattern pattern = Pattern.compile(regex);Matcher mch = pattern.matcher(str);while (mch.find()) {System.out.println(mch.group());}}
运行结果可以看到

从上图可以看到匹配到了最后面一个</div>这种就是贪婪匹配,而如果想要表达式不匹配最后面的那个div,那么?就派上用场了。

将上面代码中的正则表达式变为

String regex = "<div id=\"article_content\" class=\"article_content\">(.*?)</div>";
然后再运行可以看到,

上图可以看出,通过非贪婪表达式已经完美解决了我所遇到的问题.

通常的非贪婪表达式有以下几种格式:

  • *? 重复任意次,但尽可能少重复
  • +? 重复1次或更多次,但尽可能少重复
  • ?? 重复0次或1次,但尽可能少重复
  • {n,m}? 重复n到m次,但尽可能少重复
  • {n,}? 重复n次以上,但尽可能少重复
以后在项目中应该还会用到,在这里先记录一下


http://chatgpt.dhexx.cn/article/k2RaOcJO.shtml

相关文章

问号表达式与逗号表达式问题

问号表达式&#xff1a; #include<stdio.h> void main() {int a,b,c,d,e;c9;d8;scanf("%d,%d",&a,&b);e(a>b)?c:d;printf("%d\n",e); } 可以理解为&#xff0c;如果a>b则ec&#xff0c;否则ed。“”后整体表达式可以看做&#xff08…

JavaScript 中问号的三种用法 ??和?.以及?: 您知道吗?

最近看了一些关于JavaScript的测试脚本&#xff0c;觉得JS 中问号的用法还是蛮有意思的&#xff0c;于是做了一下总结&#xff0c;在这里分享给大家&#xff01;JS中的问号大概有三种用法&#xff0c;分别是&#xff1a;空值合并操作符、可选链操作符和三目运算。 问号问号&…

实验6:shell编程

实验目的 &#xff08;1&#xff09;掌握shell编程的变量、程序控制结构、条件测试等语法。 &#xff08;2&#xff09;了解shell 脚本的运行方式 &#xff08;3&#xff09;理解shell脚本中的函数 &#xff08;4&#xff09;掌握简单shell脚本编写方法实验环境 &#xff08;1&…

shell编程练习题

近来学习到linux的shell编程一块&#xff0c;于是学完后想练习一下。本文就是基于一道练习题来记录一下自己遇到的问题以及解决的过程。 首先看题目&#xff1a;编写shell脚本&#xff0c;要求实现如下功能&#xff1a;当执行一个程序的时候&#xff0c;这个程序会让使用者选择…

Shell编程三剑客

文章目录 前言grep选项 sed 工具概述基本语法常见的 sed 命令选项常见的操作 实验结合正则表达式输出符合条件的文本删除符合条件的文本替换符合条件的文本迁移符合条件的文本 使用脚本编辑文件调用变量来改文件 awk概述工作原理&#xff1a;选项工作原理内置变量关于数组与字符…

Shell编程【万字Shell详细介绍带你入门建议收藏】

文章目录 1 Shell 基础介绍1.1 Shell 简介Shell 概述Shell 发展史查看Shell查看系统默认安装的 Shell查看当前登录用户默认 Shell查看当前的 Shell 1.2 Shell 脚本(定义、作用、格式、权限及执行)Shell 脚本基础知识Shell 脚本的约束Shell 脚本可以完成很多任务&#xff0c;但不…

Linux之Shell编程详解

精心整理Shell编程的入门&#xff0c;并配图加代码&#xff0c;方便大家跟着操作&#xff0c;但是难免不了存在纰漏&#xff0c;感谢大家的指正与理解&#xff01;觉的写的不错的小伙伴儿&#xff0c;一键三连支持一下&#xff0c;后期会有持续更新&#xff01;&#xff01;谢谢…

Linux系统的Shell编程

一. 什么是Shell 1. 在学习Shell编程之前&#xff0c;我们应该要先知道什么是Shell 用户、Shell、Linux内核、硬件的关系如下图&#xff1a; Shell是一个应用程序&#xff0c;也可以说是一个命令解释器&#xff0c;它是用户和Linux内核之间的桥梁&#xff0c;可以将用户在图形界…

Linux中的Shell编程

1.Shell的概念 shell是一个命令行解释器&#xff0c;它为客户提供了一个Linux内核发送请求一边运行程序界面系统级程序&#xff0c;用汉语可以通过shell启动、挂起、停止甚至编写一些程序。 shell还是一个功能强大的编程语言&#xff0c;易于编辑&#xff0c;易于调试&#xff…

Shell编程实验

实验二 Shell编程 文章目录 实验二 Shell编程一、如果当前目录下有文件f1&#xff0c;但是没有f2&#xff0c;解释命令ls f1 f2 2>ef1 1>&2的运行结果。二、使用for循环语句编写一段B-shell程序&#xff0c;完成显示用户注册目录下的a_sub, b_sub子目录下的所有C程序…

Shell编程入门

文章目录 1 Shell编程简介2 Shell脚本的执行方式3 Shell变量3.1 Shell变量介绍3.2 定义变量的规则3.3 将命令的返回值赋给变量&#xff08;重点&#xff09; 4 设置环境变量5 位置参数变量6 预定义变量7 运算符8 条件判断8.1 基本介绍8.2 if 判断8.3 case 语句 9 循环语句9.1 f…

Linux Shell编程

Linux Shell编程 一、简述 简单的介绍shell脚本的基本用法。 shell脚本是 由一些按照一定格式组合起来的shell命令 组成。shell脚本不需要编译就可以直接执行&#xff0c;它是边解释边执行的。 二、命令解释器 Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell&a…

Shell编程入门学习

文章目录 Shell编程Shell脚本的执行方式Shell的变量Shell的变量的介绍shell变量的定义 设置环境变量位置参数变量介绍基本语法 预定义变量基本介绍基本语法 运算符基本语法 条件判断判断语句常用判断条件 流程控制if 判断case语句for循环while循环 read读取控制台输入基本语法 …

shell编程

文章目录 一、shell简介二、shell脚本的执行方式三、shell变量3.1 shell变量介绍3.2 shell变量的定义3.2.1 基本语法3.2.2 定义变量的规则3.2.3 将命令的返回值赋予变量 四、环境变量的设置五、位置参数变量5.1 基本介绍5.2 基本语法 六、预定义变量6.1 基本介绍6.2 基本语法 七…

shell编程入门(一天掌握shell编程)

一、背景 到新公司之后&#xff0c;发现好多地方需要使用shell来编写一些简单的程序来提升自己的工作效率&#xff0c;因此专门B站上查看视频&#xff08;尚硅谷的视频&#xff09;&#xff0c;在这里学习总结下shell编程。 二、shell概述 shell是一个命令行解释器&#xff…

Linux【实操篇】—— Shell 编程入门、变量、运算符、条件判断、流程控制

目录 一、Shell 编程入门 1. 认识 Shell 2. Shell 脚本的创建与执行 二、Shell 变量 1. 系统变量和自定义变量 2. 变量的基本规则 3. 设置环境变量 4. 位置参数变量 5. 预定义变量 三、运算符 四、条件判断 五、流程控制 1. if 语句 2. case 语句 3. fo…

各大常见OJ与推荐OJ汇总(OJ题量统计)

这么长时间了 收集了不少做题的网站 在这里列一列 可以挑自己各方面都喜欢的主用 并没有什么顺序 大家择优选择 Last-Modified: 2023/3 POJ&#xff08;北京大学&#xff09;洛谷CowcoderLibreOJCodeforces&#xff08;俄罗斯&#xff09;东北大学秦皇岛分校oj51Nodhihocoder…

华为OD机试(2023A+B)在线OJ模拟

语言支持 CCJavaJavaScript&#xff08;Node.js-CJS、Node.js-ESM&#xff09;Python&#xff08;Python3、PyPy3、Python3-Graphics&#xff09;Mono C#GoRubyRustSQLHaskellBashJuliaKotlin/JVMFortranPascalPHPVerilog 用例库说明 在线OJ中的题目用例均来自本人构思&#…

在线OJ注意事项

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 一、OJ概念 online judge&#xff0c;简称OJ&#xff0c;是一个在线的判题系统。 用户可以在线提交多种程序代码(比如&#xff1a;C、C、Java、Python等)&#xff0c;系统对源代码进行编译和执行&#xff0c;并通过预先设计…

在线OJ系统

在线OJ系统 项目开始之前需要准备的第三方库项目分析 两大模块在线编译模块整体思路编译模块 题目管理模块数据存储页面显示服务器 项目开始之前 需要准备的第三方库 httplib g版本必须得是4.9以上 ctemplate boost&#xff1a; yum install boost-devel.x86_64 jsoncpp&a…