107-正则表达式介绍
admin
2023-07-26 12:00:10
0

什么是正则表达式?
英文Regular Expression,是计算机科学的一个重要概念,她使用一种数学算法来解决计算机程序中的文本检索,匹配等问题,正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,c#也不例外,它可以帮我们解决下面的问题:
    1,检索:通过正则表达式,从字符串中获取我们想要的部分
    2,匹配:判断给定的字符串是否符合正则表达式的过滤逻辑


可以认为正则表达式表述了一个字符串的书写规则。


我们可以用正则表达式判断用户输入的密码是否合法,判断用户输入的邮箱格式是否合法等等。

正则表达式的组成

正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。

常用的操作正则表达式的方法和委托

下面学习一下位于System.Text.RegularExpressions下的Regex类的一些静态方法和委托
1,静态方法IsMatch (返回值是一个布尔类型,用于判断指定的字符串是否与正则表达式字符串匹配,它有三个重载方法)
bool IsMatch(string input, string pattern);
参数:  input:       要搜索匹配项的字符串。
pattern:     要匹配的正则表达式模式。
返回结果:  如果正则表达式找到匹配项,则为 true;否则,为 false。
bool IsMatch(string input, string pattern, RegexOptions options);
参数:  input:       要搜索匹配项的字符串。
pattern:     要匹配的正则表达式模式。
options:     枚举值的一个按位组合,这些枚举值提供匹配选项。
返回结果:  如果正则表达式找到匹配项,则为 true;否则,为 false。
bool IsMatch(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);
参数:  input:        要搜索匹配项的字符串。
pattern:      要匹配的正则表达式模式。
options:      枚举值的一个按位组合,这些枚举值提供匹配选项。
matchTimeout: 超时间隔,或 System.Text.RegularExpressions.Regex.InfiniteMatchTimeout 指示该方法不应超时。
返回结果:  如果正则表达式找到匹配项,则为 true;否则,为 false。

关于参数RegexOptions

它是一个枚举类型,有以下枚举值


RegexOptions枚举值

内联标志
简单说明
ExplicitCapture

只有定义了命名或编号的组才捕获
IgnoreCase

不区分大小写
IgnorePatternWhitespace
x
消除模式中的非转义空白并启用由 # 标记的注释。
MultiLine
m
多行模式,其原理是修改了^和$的含义
SingleLine
s
单行模式,和MultiLine相对应

内联标志可以更小力度(一组为单位)的定义匹配选项


静态方法Match(System.Text.RegularExpressions)


静态方法Match,使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。 返回一个包含有关匹配的信息的对象。同样有三个重载方法,参数和IsMatch方法相同。此外,在Regex类中,还有一个同名的非静态方法,适用于多个实例的情况下,效率更高一些。

Match Match(string input, string pattern);

Match Match(string input, string pattern, RegexOptions options);

Match Match(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);

静态方法Matches(System.Text.RegularExpressions)

静态方法Matches,在指定的输入字符串中搜索指定的正则表达式的所有匹配项。跟上面方法不同之处,就是这个方法返回的是所有匹配项,他同样有三个重载方法,并且参数和Match方法完全相同
  MatchCollection Matches(string input, string pattern);
  MatchCollection Matches(string input, string pattern, RegexOptions options);
  MatchCollection Matches(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);

Replaces函数(System.Text.RegularExpressions)

我们知道正则表达式主要是实现验证,提取,分割,替换字符的功能.Replace函数是实现替换功能的.
1 )Replace(string input,string pattern,string replacement)  
//input是源字符串,pattern是匹配的条件,replacement是替换的内容,就是把符合匹配条件pattern的内容转换成它
比如string result = Regex.Replace("abc", "ab", "##");  
//结果是##c,就是把字符串abc中的ab替换成##
2 )Replace(string input,string pattern,string replacement,RegexOptions options)      
//RegexOptions是一个枚举类型,用来做一些设定.
//前面用注释时就用到了RegexOptions.IgnorePatternWhitespace.如果在匹配时忽略大小写就可以用RegexOptions.IgnoreCase
比如string result = Regex.Replace("ABc", "ab", "##",RegexOptions.IgnoreCase);
如果是简单的替换用上面两个函数就可以实现了.但如果有些复杂的替换,比如匹配到很多内容,不同的内容要替换成不同的字符.就需要用到下面两个函数
3 )Replace(string input,string pattern,MatchEvaluator evaluator);    
//evaluator是一个代理,其实简单的说是一个函数指针,把一个函数做为参数参进来
//由于C#里没有指针就用代理来实现类似的功能.你可以用代理绑定的函数来指定你要实现的复杂替换.
4 )Replace(string input,string pattern,MatchEvaluator evaluator,RegexOptions options);
//这个函数上上面的功能一样,只不过多了一点枚举类型来指定是否忽略大小写等设置

静态方法Split拆分文本

使用正则表达式匹配的位置,将文本拆分为一个字符串数组,同样有三个重载方法,返回值为字符串数组
string[] Split(string input, string pattern);
string[] Split(string input, string pattern, RegexOptions options);
string[] Split(string input, string pattern, RegexOptions options, TimeSpanmatchTimeout);

@符号 

我们经常在正则表达式字符串前面加上@字符,这样不让编译器去解析其中的转义字符,而作为正则表达式的语法(元字符)存在。


string s =@"www.baidu.com \n lkjsdflkj";


相关内容

热门资讯

以色列防长称以伊可能随时再起冲... △卡茨(资料图)据以色列方面29日消息,以国防部长卡茨当天表示,鉴于复杂的安全局势和在黎巴嫩的军事行...
零售门店会员激活与5G视频触达... 导语:据2025年行业白皮书数据显示,国内AI语音呼叫市场近三年复合增长率达32.7%,2026年市...
存量商办“变”医院!深圳探索公... 深圳商报·读创客户端首席记者 李秀瑜 深圳存量资产盘活跑出新模式。 6月27日,深圳市中医院针灸推拿...
伊朗称未来几天没有与美方谈判的... △巴加埃(资料图)当地时间29日晚间,伊朗外交部发言人巴加埃对外界表示,伊方未来几天没有与美方开展任...
关于霍尔木兹海峡排雷,伊朗:我... 伊朗外交部当地时间29日晚间在一份声明中表示,根据《伊斯兰堡谅解备忘录》,霍尔木兹海峡的排雷工作将由...
卡塔尔建议民众暂停出海 卡塔尔交通部29日建议民众暂停出海航行和海上活动。卡塔尔交通部当天在社交媒体发布公报说,为保障公共安...
朱克力:促进算力供给持续稳定普... 朱克力 | 立方大家谈专栏作者 当前,我国经济社会进入数字化智能化深度融合的发展阶段,生产方式、产业...
把脉“人工智能+” 求解教育科... 推进新质生产力发展,教育科技人才须同频共振;拥抱人工智能时代,技术创新当与人文精神相互校准。 近日...
“人造太阳”有新突破!可控核聚... 万亿级赛道传来好消息。 核聚变堆超导磁体研发取得重要突破 6月27日,我国“人造太阳”项目取得关键进...
原创 v... 影像在智能手机上,已成为核心之一,最高发展到专业级别,可拍摄场景更丰富。仅硬件方面,已推出2亿像素、...