什么是正则表达式?
英文RegularExpression,是计算机科学的一个重要概念,她使用一种数学算法来解决计算机程序中的文本检索,匹配等问题,正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,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,RegexOptions options,TimeSpanmatchTimeout);
参数: input: 要搜索匹配项的字符串。
options: 枚举值的一个按位组合,这些枚举值提供匹配选项。
matchTimeout:超时间隔,或 System.Text.RegularExpressions.Regex.InfiniteMatchTimeout 指示该方法不应超时。
返回结果: 如果正则表达式找到匹配项,则为 true;否则,为 false。
关于参数RegexOptions
它是一个枚举类型,有以下枚举值
RegexOptions枚举值 内联标志 简单说明
ExplicitCapture n 只有定义了命名或编号的组才捕获
IgnoreCase i 不区分大小写
IgnorePatternWhitespace x 消除模式中的非转义空白并启用由# 标记的注释。
MultiLine m 多行模式,其原理是修改了^和$的含义
SingleLine s 单行模式,和MultiLine相对应
内敛标志可以更小力度(一组为单位)的定义匹配选项
静态方法Match(System.Text.RegularExpressions)
静态方法Match,使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。返回一个包含有关匹配的信息的对象。同样有三个重载方法,参数和IsMatch方法相同。此外,在Regex类中,还有一个同名的非静态方法,适用于多个实例的情况下,效率更高一些。
MatchMatch(string input,string pattern);
MatchMatch(string input,RegexOptions options);
MatchMatch(string input,TimeSpanmatchTimeout);
静态方法Matches(System.Text.RegularExpressions)
静态方法Matches,在指定的输入字符串中搜索指定的正则表达式的所有匹配项。跟上面方法不同之处,就是这个方法返回的是所有匹配项,他同样有三个重载方法,并且参数和Match方法完全相同
MatchCollectionMatches(string input,string pattern);
MatchCollectionMatches(string input,RegexOptions options);
MatchCollectionMatches(string input,TimeSpanmatchTimeout);
Replaces函数(System.Text.RegularExpressions)
我们知道正则表达式主要是实现验证,提取,分割,替换字符的功能.Replace函数是实现替换功能的.
1 )Replace(string input,stringpattern,string replacement)
//input是源字符串,pattern是匹配的条件,replacement是替换的内容,就是把符合匹配条件pattern的内容转换成它
比如string result =Regex.Replace("abc","ab","##");
//结果是##c,就是把字符串abc中的ab替换成##
2 )Replace(string input,string replacement,RegexOptions options)
//RegexOptions是一个枚举类型,用来做一些设定.
//前面用注释时就用到了RegexOptions.IgnorePatternWhitespace.如果在匹配时忽略大小写就可以用RegexOptions.IgnoreCase
比如string result =Regex.Replace("ABc","##",RegexOptions.IgnoreCase);
如果是简单的替换用上面两个函数就可以实现了.但如果有些复杂的替换,比如匹配到很多内容,不同的内容要替换成不同的字符.就需要用到下面两个函数
3 )Replace(string input,MatchEvaluator evaluator);
//evaluator是一个代理,其实简单的说是一个函数指针,把一个函数做为参数参进来
//由于C#里没有指针就用代理来实现类似的功能.你可以用代理绑定的函数来指定你要实现的复杂替换.
4 )Replace(string input,MatchEvaluator evaluator,140)">//这个函数上上面的功能一样,只不过多了一点枚举类型来指定是否忽略大小写等设置
静态方法Split拆分文本使用正则表达式匹配的位置,将文本拆分为一个字符串数组,同样有三个重载方法,返回值为字符串数组
string[] Split(string input,string pattern);
@符号
我们经常在正则表达式字符串前面加上@字符,这样不让编译器去解析其中的转义字符,而作为正则表达式的语法(元字符)存在。
string s =@"www.baidu.com \nlkjsdflkj";