1、正则表达式是用来进行文本处理的技术,是 语言无关 的,在几乎所有语言中都有实现。 javascript 中还会用到。
2、 一个正则表达式就是由普通字符以及特殊字符 ( 称为 元字符 ) 组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
3、 就像通配符“* .jpg ”、“ % ab %” ,它是对字符串进行匹配的特殊字符串
4、 正则表达式是非常复杂的,不要希望一次都掌握,理解正则表达式能做什么(字符串的匹配、字符串的提取、字符串的替换),掌握常用的正则表达式用法,以后用到再查就行。
5、 找工作的亮点。后面项目中的采集器、敏感词过滤、 URLRewite 、 Validator 也会涉及到正则表达式。
6、正则表达式是对字符串操作的。
元字符
想学会正则表达式,理解元字符是一个必须攻克的难关。不用刻意记
1、 . :匹配除 \n 之外的任何 单个字符 。例如正则表达式“ b.g ” 能匹配如下字符串:“ big” 、“ bug” 、“ bg” ,但是不匹配“ buug ” ,“ b..g ” 可以匹配“ buug ” 。
2、[] :匹配括号中的 任何一个 字符。例如正则表达式“ b[ aui ]g” 匹配 bug 、 big 和 bag ,但是不匹配 beg 、 baug 。可以在括号中使用 连字符“ -” 来指定字符的区间 来简化表示,例如正则表达式 [0-9] 可以匹配任何数字字符,这样正则表达式“ a[0-9]c” 等价于“ a[0123456789]c” 就可以匹配“ a0c” 、“ a1c” 、“ a2c” 等字符串;还可以制定多个区间,例如“ [A- Za -z]” 可以匹配任何大小写字母,“ [A-Za-z0-9]” 可以匹配任何的大小写字母或者数字。
3、 :将两个匹配条件进行逻辑“或”运算。 ‘ z|food ’ 能匹配 “z” 或 “food” 。 ‘( z|f ) ood ’ 则匹配 “ zood ” 或 “food” 。 // 注意 ^$ 问题。
4、() :将 () 之间括起来的表达式定义为“组” (group) ,并且将匹配这个表达式的字符保存到一个临时区域 , 这个元字符在字符串提取的时候非常有用。把一些字符表示为一个整体。 改变优先级、定义提取组 两个作用。
5、*:匹配 0 至多个在它之前的子表达式,和通配符*没关系 。例如正则表达式“ zo *” (等同于 z(o)* )能匹配“ z” 、“ zo ” 以及“ zoo” ;因此“ .*” 意味着能够匹配任意字符串。 "z( b|c )*"→ zb 、 zbc 、 zcb 、 zccc 、 zbbbccc 。 "z( ab )*" 能匹配 z 、 zab 、 zabab (用括号改变优先级)。
6、+ :匹配前面的子表达式 一次或多次 ,和*对比( 0 到多次 )。例如正则表达式 9+ 匹配 9 、 99 、 999 等。“ zo +” 能匹配“ zo ” 以及“ zoo” ,不能匹配 "z" 。
7、? :匹配前面的子表达式 零次或一次 。例如, “do( es )?” 可以匹配 “do” 或 “does” 。一般用来匹配“可选部分”。( 终止贪婪模式 )
8、{n} :匹配确定的 n 次。 “ zo {2}”→zoo 。例如,“ e{2}” 不能匹配“ bed” 中的“ e” ,但是能匹配“ seed” 中的两个“ e” 。 // seeeed , 不可以。
9、{n,}: 至少匹配 n 次。例如,“ e{2,}” 不能匹配“ bed” 中的“ e” ,但能匹配“ seeeeeeeed ” 中的所有“ e” 。
10、{ n,m } :最少匹配 n 次且最多匹配 m 次。“ e{1,3}” 将匹配“ seeeeeeeed ” 中的前三个“ e” 。 {2,5}// bed,seed,seeed; beeeeed 错误。
限定符:限定前面的正则表达式出现的次数。
1、^ ( shift+6 ):匹配一行的 开始 。例如正则表达式“ ^regex” 能够匹配字符串“ regex 我会用”的开始,但是不能匹配“我会用 regex” 。
2、^ 另外一种意思:非!( [^0-9] )
3、$ :匹配行结束符。例如正则表达式“浮云 $” 能够匹配字符串“一切都是浮云”的末尾,但是不能匹配字符串“浮云呀”
4、^ abc , 匹配一个正则表达式的开始
• abc jflkdsjfkdsjf
888$ ,匹配一个正则表达式的结束。
• 积分多少快乐解放路口的手机费 888
简写表达式
注意这些简写表达式是不考虑转义符的,这里的 \ 就表示字符 \ ,而不是 C# 字符串级别的 \ ,在 C# 代码中需要使用 @ 或者 \ 双重转义。区分 C# 级别的转移和正则表达式级别的转移, 恰好 C# 的转义符和正则表达式的转义符都是 \ 而已 。正则表达式的转义是在 C# 之后的(层层盘剥)。把 C# 的转义符想成 % 就明白了。在 C# 看来 @"\-" 就是 \- 这个普通的字符串,只不过在正则表达式分析引擎看来他有了特殊含义。 "\\d" 或者 @"\d"
• \d :代表一个数字,等同于 [0-9] \\d →\d
• \D :代表非数字,等同于 [^0-9]
• \s :代表换行符、 Tab 制表符等空白字符 ,( 空格、回车、制表符 )
• \S :代表非空白字符( a0%$@@ )
• \w :匹配字母或数字或下划线或汉字,即能组成单词的字符 , 除 %&#@!$ 等字符。
• \W :非 \w ,等同于 [^\w]
d : digital ; s : space 、 w : word 。大写就是“非”
正则表达式在 .Net 就是用字符串表示,这个字符串格式比较特殊,无论多么特殊, 在 C# 语言看来都是普通的字符串 ,具体什么含义由 Regex 类内部进行语法分析。
如何匹配 大于 10 小于 20 的字符串?(正则表达式是对字符串的操作。) ^ [1][1-9]$ , 【11,12,13,14,15,16,17,18,19】 观察字符串!自己写正则表达式之前先仔细观察字符串。
正则表达式( RegularExpression )的主要类: Regex
常用 的 4 种情况:( C# 语法)
• 判断是否匹配: Regex. IsMatch ( “ 字符串 ” , ” 正则表达式 ” );
• 字符串提取: Regex .Match ( “ 字符串 ” , “ 要提取的字符串的正则表达式 ” );// 只能提取一个(提取一次)
• 字符串提取 ( 循环提取所有 ) : Regex. Matches ( ) ,(可以提取所有匹配的字符串。)
• 字符串替换: Regex. Replace ( “ 字符串 ” , ” 正则 ” , ” 替换内容 ” );
Regex . IsMatch 方法用于判断一个字符串是否匹配正则表达式。
字符串匹配例子:
Regex.IsMatch("bbbbg","^b.*g$");
Regex.IsMatch("bg","^b.*g$");
Regex.IsMatch("gege","^b.*g$");
一定不能忘了^和$,否则也能匹配yesbagit