正则表达式

来源:互联网 发布:手机丢了淘宝怎么冻结 编辑:程序博客网 时间:2024/05/29 04:28
 
正则表达式简介
       .NET 平台提供了一个专门的命名空间用于实现正则表达式的功能,它就是System.Text.RegularExpressions。正则表达式(RegEx)最早出现在UNIX系统中,后来被广泛用于批量程序和脚本语言,如Perl。它的功能非常强大,特别是在字符串匹配和处理方面,例如字符串的替换等等。通常,我们通过查找函数在输入字符串中匹配并定为符合模式的字串。虽然如此,利用正则表达式却可以处理到复杂的匹配模式。
       正则表达式的匹配模式是通过字符常量和专用字符的组合来定义的。其专用字符可用于表示字符串行首,或任何非空白字符,等等其它功能。在程序P 页有一个方法,它就是通过正则表达定义了一个要查询的字符串匹配模式:
String strPwdMatch = @"^/S*$";
       在这个表达式中,首先“@”它是C#语言的专用表达式。如果把它置于字符串常量的前面(双引号包含的部分),编译器就不会把反斜杠(“/”)作为转义符来处理了。否则上面的正则表达式就必须写成这样"^//S*$"。虽然“@”不是必须要用的,但如果要匹配的字符串模式的确很复杂,利用这一特性的确可以帮助我们简化表达式并更好地理解待匹配模式的含义。
       上面用到的正则表达式包含了四个专用的字符: ^/S*以及$^表示从第一个字符开始搜索;$表示搜索一直到最后一个字符结束;/S表示要匹配任何非空白字符串;*表示它前面的字符组合可以重复0次或者任意多次。
       归纳起来,这个正则表达式要匹配的字符串模式为:
(1)       从字符串的开始处检查
(2)       查找连续非空字符
(3)       把检查进行到字符串的末尾
       System.Text.RegularExpresssions命名空间中有许多类。其中最常用的是Regex类,它包含了用于匹配字符串模式的方法。作为一个静态类,调用它的方法无需考虑类型声明和事后的资源释放。另一个类就是Match。它会找出字符串中第一个符号匹配条件的子串。如果,字符串中包含多个满足条件的子串,那么它也会在找到第一个时返回。如果要返回字符串中所有满足条件的子串,可以使用MatchCollection对象。
表1.常用的元字符 代码 说明 . 匹配除换行符以外的任意字符 /w 匹配字母或数字或下划线或汉字 /s 匹配任意的空白符 /d 匹配数字 /b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束
表2.常用的限定符 代码/语法 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次
3.常用的反义代码 代码/语法 说明 /W 匹配任意不是字母,数字,下划线,汉字的字符 /S 匹配任意不是空白符的字符 /D 匹配任意非数字的字符 /B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符

例子:/S+匹配不包含空白符的字符串

<a[^>]+>匹配用尖括号括起来的以a开头的字符串

  表4.分组语法 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号 零宽断言 (?=exp) 匹配exp前面的位置 (?<=exp) 匹配exp后面的位置 (?!exp) 匹配后面跟的不是exp的位置 (?<!exp) 匹配前面不是exp的位置 注释 (?#comment) 这种类型的组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 表5.常用的处理选项 名称 说明 IgnoreCase(忽略大小写) 匹配时不区分大小写。 Multiline(多行模式) 更改^$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配/n之前的位置以及字符串结束前的位置.) Singleline(单行模式) 更改.的含义,使它与每一个字符匹配(包括换行符/n)。 IgnorePatternWhitespace(忽略空白) 忽略表达式中的非转义空白并启用由#标记的注释。 RightToLeft(从右向左查找) 匹配从右向左而不是从左向右进行。 ExplicitCapture(显式捕获) 仅捕获已被显式命名的组。 ECMAScript(JavaScript兼容模式) 使表达式的行为与它在JavaScript里的行为一致。

一款很酷很棒的正则表达式速成器在我的资源可供下载 :)

 一道例题~

将 123<abc>456<frg>78<df> 方括号里的字符过滤

得 12345678

 

            // Regex search and replace
            RegexOptions options = RegexOptions.None;
            Regex regex 
= new Regex(@"<[^>]+>", options);
            
string input = textIn.Text;
            
string replacement = @"";
            
string result = regex.Replace(input, replacement);
            textOut.Text 
= result;
            
// TODO: Do something with result
            
//System.Windows.Forms.MessageBox.Show(result, "Replace");

 

 

原创粉丝点击