java 正则表达式 非贪婪模式_正则表达式的贪婪模式和非贪婪模式
一、什么是贪婪模式和非贪婪模式?
定义
贪婪模式:正则表达式趋向于匹配最大长度。
非贪婪模式:正则表达式趋向于匹配最小长度,即一旦匹配到结果就结束。
如何区分?
默认是贪婪模式。
若 量词 后面添加 问号(?),则是非贪婪模式。量词 包括以下4种:
{m, n}:匹配 m 到 n 个,包含 m、n。
{N} --> 匹配N次
{M, N} --> 匹配M到N次
{M,} --> 匹配至少M次
{,N} --> 匹配至多N次
*:匹配任意多个,包括0个。
+:匹配1到多个。
?:0或1个。
简单示例
String str = "abcaxc";
Pattern p1 = "ab.*c"; # 贪婪模式,匹配结果是:abcaxc
Pattern p2 = "ab.*?c"; # 量词*后面添加?,是非贪婪模式,匹配结果:abc
二、程序实例
1)Java 代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression {
public static void main(String[] args) {
String text = "(content:\"rcpt to root\";pcre:\"word\";)";
String rule1 = "content:\".+\""; //贪婪模式
String rule2 = "content:\".+?\""; //非贪婪模式
System.out.println("文本:" + text);
System.out.println("贪婪模式:" + rule1);
Pattern p1 = Pattern.compile(rule1);
Matcher m1 = p1.matcher(text);
while (m1.find()) {
System.out.println("匹配结果:" + m1.group(0));
}
System.out.println("非贪婪模式:" + rule2);
Pattern p2 = Pattern.compile(rule2);
Matcher m2 = p2.matcher(text);
while (m2.find()) {
System.out.println("匹配结果:" + m2.group(0));
}
}
}
运行结果:
文本:(content:"rcpt to root";pcre:"word";)
贪婪模式:content:".+"
匹配结果:content:"rcpt to root";pcre:"word"
非贪婪模式:content:".+?"
匹配结果:content:"rcpt to root"
2)Python 代码
# 导入re模块
import re
text = '
贪婪'
print("文本:", text)
print("贪婪模式:")
print(re.findall(r"<.>", text))
print("非贪婪模式:")
print(re.findall(r"<.>", text))
运行结果:
文本:
贪婪
贪婪模式:
['
']
非贪婪模式:
['
']
java 正则表达式 非贪婪模式_正则表达式的贪婪模式和非贪婪模式相关推荐
- java 生产者消费者模式_聊聊并发(十)生产者消费者模式
本文首发于InfoQ 作者:方腾飞 校对:张龙 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使 ...
- 我的世界java旁观者模式_我的世界如何切换到旁观模式
我的世界中如何切换到旁观模式 本篇教程将用图文的形式一步步教会你在我的世界中如何切换到旁观模式. 旁观模式只出现在我的世界PC/Mac版本中,它首次出现在我的世界PC/Mac 1.8版本中,允许玩家 ...
- 有几种部署模式_来!PyFlink 作业的多种部署模式
关于 PyFlink 的博客我们曾介绍过 PyFlink 的功能开发,比如,如何使用各种算子(Join/Window/AGG etc.),如何使用各种 Connector(Kafka, CSV, So ...
- crt 8.7.3 黑暗模式_科技有意思 | 黑黑黑黑黑黑黑黑暗模式
不知从什么时候,手机上的黑暗模式成了系统的标配. 本来这只是系统中的一个功能,现在经过从iOS 13系统的终于支持.苹果督促包括腾讯在内的开发者尽快适配,到一直不支持黑暗模式的微信也答应尽快开发相关功 ...
- 小米手环6NFc支持Android,小米手环6nfc有几种运动模式_小米手环6nfc支持几种运动模式...
小米手环6nfc版发布之后有不少人关注,这个版本相对之前增加了不少运动模式,具体小米手环6nfc有几种运动模式,大家感兴趣的话不妨来中国排行网看看小米手环6nfc支持几种运动模式. 1.小米手环6nf ...
- android 打开免打扰模式_今天才知道,原来手机飞行模式这么厉害,每天晚上都能用得到...
在我们的手机上有一个飞行模式,想必很多人都只是知道,却没有用过,其实这个飞行模式还是挺厉害的,我们每天晚上都能用得着,一起看来了解一下吧. 一.降低辐射 一天工作8小时就已经够累的了,晚上回到家里当然 ...
- java 正则 最后一个字符_正则表达式怎么匹配字符串中最后一串数字?
展开全部 importre temp='DwellTime:666' m=re.search(r'\d*',temp) printrepr(m.group()),m.start(),m.end() m ...
- java正则匹配下划线_正则表达式(匹配英文、中文、数字、下划线)
如下的正则: 复制代码 代码示例: ^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$ 1.一个正则表达式,只含有汉字.数字.字母.下划线不能以下划线开头和结尾: ^(?!_)(?!. ...
- Java通过正则剔除乱码_正则表达式 - 去掉乱码字符/提取字符串中的中文字符/提取字符串中的大小写字母 - Python代码...
目录 1.乱码符号种类较少,用replace() 2.乱码字符种类较多,用re.sub() 3.提取字符串中的中文字符 4.提取字符串中的中文字符和数字 5.提取其他 数据清洗的时候一大烦恼就是数据中 ...
最新文章
- linux系统管理工具sar(一)
- 【LeetCode从零单排】No.8 String to Integer (丧心病狂的一道题)
- 剑指offer:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
- NYOJ 864 统计
- jquery饼状图插件的指引线_JQuery图表插件Highcharts示例教程
- ubuntu使用root权限登录的设置方法
- SpringBoot项目属性配置
- [Luogu 1312] noip11 Mayan游戏
- JSP 获取访问者真正的IP地址
- 卷组删除pv_CentOS下删除一个卷组(VG)
- mysql在linux下的完整安装
- linux安装7z到指定目录,linux下安装7zip
- 金蝶云星空之表单插件的开发
- C++ 读写TXT文件
- 纬地道路纵断面设计教程_道路BIM模型快速生成
- 如何检测异方差并纠正它?
- 写作三件套(VScode Miktex Latex Workshop)入门三大坑
- 降噪耳机哪款比较好?佩戴舒适的降噪蓝牙耳机推荐
- 【教程】七天入门C#上位机目录
- html5 打气球小游戏,在javascript+css3中如何实现打气球小游戏