c# 贪婪匹配 html,C#正则表达式之贪婪模式
1、贪婪模式演示:(当提取多个超链接的时候)
• “1111。11。111。111111。”
• 贪婪:.+。(默认为贪婪模式,尽可能的多匹配。)
• 非贪婪:.+?。(尽可能的少匹配,(1个。))
2、从文本提取出名字:Match match = Regex.Match("大家好。我是S.H.E。我22岁了。我病了,呜呜。fffff","我是(.+)。");//没有加^$。
3、看结果。+、*的匹配默认是贪婪(greedy)的:尽可能多的匹配,直到“再贪婪一点儿”其后的匹配模式就没法匹配为止。
4、在+、*后添加?就变成非贪婪模式(? 的另外一个用途):让其后的匹配模式尽早的匹配。修改成"我是(.+?)。"
5、一般开发的时候不用刻意去修饰为非贪婪模式,只有遇到bug的时候发现是贪婪模式的问题再去解决。如果匹配的结果比自己预想的要多,那么一般都是贪婪模式的原因。
示例演示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace _13贪婪模式介绍
{
class Program
{
static void Main(string[] args)
{
//默认正则表达式采用贪婪模式,尽可能多的进行匹配
string str = "啊哈哈hello worldwwwwwwww!嘎嘎!";
//提取英文
//当正则表达式提取的时候,如果1个字符也能匹配,多个字符也能匹配,这时,会按照使用最多字符的方式来匹配,这个就叫贪婪模式。
//当终止贪婪模式后会按照最小的方式来匹配。
string regStr = "[a-zA-Z]+";//提取结果:hello
string regStr1 = "[a-zA-Z]+?";//提取结果:h;使用?来终止贪婪模式(注:在限定符后面使用)
Match match = Regex.Match(str, regStr);
Console.WriteLine("========贪婪模式========");
Console.WriteLine(match.Value);
Console.WriteLine("========非贪婪模式========");
Match match1 = Regex.Match(str, regStr1);
Console.WriteLine(match1.Value);
//======================贪婪模式
Console.WriteLine("========贪婪模式========");
string str2 = "1111。1 1。 111。111111。";
//字符串提取
string regStr2 = ".+。";
//因为.+要尽可能多的匹配。所以会认为1111。1 1。 111。111111。都是.+匹配的结果,
//但是由于正则表达式中最后还有一个 : 。 ,所以如果要是将.+匹配了所有的字符,则最后的 。 (句号)无法找到匹配,
//正则表达式会尽可能的找到匹配,所以会将 。(句号)尝试给正则表达式中的最后一个字符(句号)来匹配,然后把前面的所有字符都用.+;来匹配。
Match match2 = Regex.Match(str2, regStr2);
Console.WriteLine(match2.Value);
Console.WriteLine("========非贪婪模式========");
string str3 = "1111。1 1。 1。 111。111111。";
//字符串提取
string regStr3 = ".+?。";//终止贪婪模式
//结果:1111。,因为.+?表示终结贪婪模式,所以只能提取出来第一个1,但是后面还有个 句号:。 ,
//所以为了匹配句号只能再向后搜索3个1,然后找到句号。所以就是1111。
Match match3 = Regex.Match(str3, regStr3);
Console.WriteLine(match3.Value);
Console.ReadKey();
}
}
}
输出结果如下:
c# 贪婪匹配 html,C#正则表达式之贪婪模式相关推荐
- python贪婪匹配顺序_Python正则表达式:贪婪模式返回多个空匹配
这种模式仅意味着将字符串中的所有内容抓取到数据中第一个潜在句子边界为止: [^\.?!\r\n]* 输出: >>> pattern = re.compile(r"([^\. ...
- PHP正则匹配效率,PHP 正则表达式效率 贪婪、非贪婪与回溯分析(推荐)
先扫盲一下什么是正则表达式的贪婪,什么是非贪婪?或者说什么是匹配优先量词,什么是忽略优先量词? 好吧,我也不知道概念是什么,来举个例子吧. 某同学想过滤之间的内容,那是这么写正则以及程序的.$str ...
- 【贪婪匹配】和【非贪婪匹配】
在学到正则的时候,看到了贪婪匹配,感觉又是什么高深莫测的术语,其实不然. 贪婪匹配:尽可能匹配最长的字符串 非贪婪匹配: 尽可能匹配最短的字符 例如: ga<div>8901</di ...
- 正则表达式的贪婪匹配与懒惰匹配
今天用到正则表达式的懒惰匹配,由于开始不是很了解,所以一个问题纠结了一天,真正了解了就不难了. 例:一个字符串"abcdakdjd" regex="a.*?d" ...
- python正则表达式贪婪匹配_Python正则表达式教程之三:贪婪/非贪婪特性
之前已经简单介绍了Python正则表达式的基础与捕获,那么在这一篇文章里,我将总结一下正则表达式的贪婪/非贪婪特性. 贪婪 默认情况下,正则表达式将进行贪婪匹配.所谓"贪婪",其实 ...
- Perl——正则表达式之贪婪模式和非贪婪模式
Perl--正则表达式之贪婪模式和非贪婪模式使用 使用perl进行正则表达式匹配时,常用两种匹配模式,一种是贪婪匹配,一种是非贪婪匹配. 贪婪匹配(greedy match):尽可能匹配最长的内容.默 ...
- python贪婪匹配和非贪婪匹配_Python关于正则贪婪与非贪婪特性的详解
这篇文章主要介绍了Python正则表达式中贪婪/非贪婪特性的相关资料,文中通过示例代码介绍的很详细,对大家具有一定的参考价值,需要的朋友下面来一起看看吧. 之前已经简单介绍了Python正则表达式的基 ...
- 如何编写与非贪婪匹配的正则表达式? [重复]
本文翻译自:How can I write a regex which matches non greedy? [duplicate] This question already has an ans ...
- Python:利用原生函数count或正则表达式compile、findall、finditer实现匹配统计(包括模糊匹配的贪婪匹配、懒惰匹配)
Python:利用原生函数count或正则表达式compile.findall.finditer实现匹配统计(包括模糊匹配的贪婪匹配.懒惰匹配) 目录 利用原生函数count或正则表达式compile ...
- 匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配
此文为python正则表达式的高阶入门,正则基础入门请参考程序员入门基础:python的正则表达式. 一.贪婪匹配和非贪婪匹配 举例说明概念: print('非贪婪匹配',re.search('el+ ...
最新文章
- 学会这八个技术,你离 BAT 大厂不远了
- 记录一次【模仿真实环境】的内网漫游
- Python之pyspark:pyspark的简介、安装、使用方法之详细攻略
- java多线程意义_Java多线程学习之多线程的概念及意义
- 小猿学python_小猿圈python入门之转行零基础该如何学Python?
- 【clickhouse】clickhouse的系统表
- Action三种编写方式
- 麦克纳姆轮辊子滚动速度分析
- 深度学习2.08.tensorflow的高阶操作之张量排序
- 一张网络路由器与能源路由器对照表(2015年)
- 分析华为鸿蒙操作系统的特点,申万宏源-通信行业系列深度研究和分析报告之华为鸿蒙操作系统全景解构.pdf...
- 如何利用用户分层来提高运营效率?
- python 时间序列异常值_干货 :时间序列异常检测
- BTC的历史背景及历程
- Entity Framework 学习建议及自学资源
- java word 图片不显示_POI用addPicture插入图片到word里面无法显示
- 阿里云开放平台微前端方案的沙箱实现
- 白痴学日语系列之Last Term附语法一
- android 对短信的操作(伪造信息)
- WPF使用转换器(Converter)
热门文章
- Python干货 | 制作遥感影像图
- 【学习笔记】多目标优化问题分解成若干简单多目标子问题--MOEA/D-M2M
- 【学习笔记】矩阵分解Matrix Factorization及延伸阅读
- cmake依赖ffmpeg库(x264)错误
- 监控系统存储服务器和磁盘阵列,监控怎样用磁盘阵列存储服务器
- NoteExpress 自定义参考文献输出样式
- spring mvc 文件上传、下载功能
- wamp5 php,WAMP5:PHP环境整合安装(一)
- Groovy框架Spock随0.6大发布
- 有没有一瞬间不想活了?