正则表达式,正则表达式总结(一)

字符串和正则表达式 、 System.String 复习前面知识 二、正则表达式 1、引入:在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求。 2、简单例子: using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string Pattern = @"hi"; string s = @"hi Hi THIS hI HI chAINA"; MatchCollection Matches = Regex.Matches(s, Pattern,RegexOptions.IgnoreCase); foreach (Match NextMatch in Matches) { Console.WriteLine(NextMatch.ToString()); } } } } 正则表达式总结(一)正则表达式 RegexOptions枚举选项: 查看MSDN 3、主要得特定字符或转义序列 1)元字符 常用元字符: 正则表达式总结(一)正则表达式 \S 任何不是空白得字符 \B 不是字边界得位置 Eg: i.ation 结果为isation iztion \ba\w*\b匹配以字母a开头的单词,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b) \b\w{6}\b 匹配刚好6个字母/数字的单词。 \d+匹配1个或更多连续的数字。 \ba\S*ion\b ----------表示以a开头,中间为任意个不是空白的字符,以ion结尾 元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$。 2)字符转义 如果你想查找元字符本身的话就必须使用字符转义 C:\\Windows匹配C:\Windows 需要转义的还有: ( ) * + . [ ] ? | C#中要想输出. 不需要转义 规则:C#中写正则表达式string Pattern = @"unibetter\$com";引号里面得东东如果要输出上面的那些特殊得字符的话,就必须在该字符得前面加上\ 然后前面的@不能掉 3)重复 正则表达式总结(一)正则表达式 Eg: ra*t 结果为rt rat raat raaat ra+t 结果为rat raat raaat ra?t 结果为rt rat Windows\d+匹配Windows后面跟1个或更多数字 ^\w+匹配一行的第一个单词 4)字符类 指定一个范围: 像[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!),像[0-9]代表的含意与\d就是完全一致的:一位数字;同理[a-z0-9A-Z_]也完全等同于\w 分析:\(?0\d{2}[) -]?\d{8} 先是一个转义字符\ 然后是( 后面是?表示( 可以出现0次或1次 再是一个0 然后后面是接两个数字 然后[) -]? 表示)或-可以出现一次或0次 最后就是接八个数字 可以出现得情形:(010)33344432 022-34566666 03292929399 (03292929399 032)92929399 (032-92929399 5)分支条件 0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。 \(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔 6)分组 如果想要重复多个字符又可以用小括号来指定子表达式(也叫做分组) (\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。 122.2.2.123 7)反义 正则表达式总结(一)正则表达式 8)零宽断言 (?=exp)也叫零宽度正预测先行断言 \b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc (?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading 零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp 例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字 (? 9.)贪婪与懒惰 a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。 a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab *为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)?简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权 三、正则在C#中的运用 using System.Text.RegularExpressions; class Program { static void Main(string[] args) { //Program.matchExpressions("Adsdsds323232"); //Program.matchAndReturn("2aaasss3"); Program.matchAndReturn("你好的速度撒东东"); //Program.replaceWord("bbbddsdsads,fdfdddddaaaa"); //Program.splitWord("192.168.1.1"); } //匹配是否存在 private static void matchExpressions(string strString) { if (Regex.IsMatch(strString, @"\ba", RegexOptions.IgnoreCase)) Console.WriteLine("YES"); else Console.WriteLine("NO"); } //匹配,并且返回匹配值 private static void matchAndReturn(string strString) { // MatchCollection maths = Regex.Matches(strString, @"\d+"); MatchCollection maths = Regex.Matches(strString, @".+?)>(?.+?)", RegexOptions.IgnoreCase); //不区分大小写的匹配 并且匹配多行,编译(表示你的正则表达式是否要编译,就类比我们数据库中的存储结构和一般的查询语句的关系.如果你的正则表达式只用一次,那么你编译就没有什么意义,如果很常用,那么编译后,以后的匹配就快些.) //MatchCollection maths = new Regex(strString, @".+?)>(?.+?)", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Complied); if (maths != null) { foreach (Match mc in maths) { string content = mc.Groups["content"].Value; Console.WriteLine(content); //Console.WriteLine(mc.ToString()); } } else Console.WriteLine("字符串中不包含匹配的项"); } //替换 private static void replaceWord(string strString) { Regex regex = new Regex("a"); string result = regex.Replace(strString, "");//b替代a Console.WriteLine(result); } //分割 private static void splitWord(string strString) { Regex regex = new Regex(@"\."); string[] result = regex.Split(strString); foreach (var a in result) { Console.WriteLine(a); } } }
Tags:  常用正则表达式 正则表达式数字 正则表达式语法 js正则表达式 正则表达式

延伸阅读

最新评论

发表评论