开发工具与关键技术:VS + C#
撰写时间:2019.07.06
我们在上一篇文献中重点介绍了正则表达式的概念,那么今天就来简单地介绍一下它的使用。学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。在这篇文章中,我将简要地介绍正则表达式中的类和方法、一些字符串匹配和替换的例子以及组结构的详细情况,最后,还会介绍一些你可能会用到的常见的表达式。
元字符:.是元字符,匹配除了换行符以外的任意字符。*同样是元字符,不过它代表的不是字符,也不是位置,而是数量——它指定*前边的内容可以连续重复出现任意次以使整个表达式得到匹配。因此,.*连在一起就意味着任意数量的不包含换行的字符。
\b是正则表达式规定的一个特殊代码,代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格或标点符号或换行来分隔的,但是\b并不匹配这些单词分隔符中的任何一个,它只匹配一个位置。
^匹配你要用来查找的字符串的开头,$匹配结尾
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义字符。反义字符比较好理解,就是排除不需要的匹配项,使用的时候直接记住所对于的代码就行,就不作详细介绍了
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。例如这个表达式:a .*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
(?=exp):零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。它断言自身出现的位置的后面能匹配表达式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):零宽负向先行断言,只会匹配后缀exp不存在的位置。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。
(?<!exp):零宽负向后行断言来查找前缀exp不存在的位置,(?<![a-z])\d{7}匹配前面不是小写字母的七位数
注:蓝色字体为简单的例子
注释:要包含注释的话,最好是启用“忽略模式里的空白符”选项,这样在编写表达式时能任意的添加空格,Tab,换行,而实际使用时这些都将被忽略。启用这个选项后,在#后面到这一行结束的所有文本都将被当成注释忽略掉。
运算符优先级:则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。相同优先级的从左到右进行运算,不同优先级的运算先高后低。上表从高到低说明了各种正则表达式运算符的优先级顺序