[转] 揭开正则表达式的神秘面纱

正则表达式(regular expression)就是用一个“字符串”来描写一个特征,然后去验证另一个“字符串”是否切合这个特征。好比 表达式“ab+” 描写的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都切合这个特征。

正则表达式可以用来:(1)验证字符串是否切合指定特征,好比验证是否是正当的邮件地点。(2)用来查找字符串,从一个长的文本中查找切合指定特征的字符串,比查找牢靠字符串越发机动利便。(3)用来替换,比普通的替换更强大。

   正则表达式进修起来其实是很简朴的,不多的几个较为抽象的观念也很容易领略。之所以许多人感受正则表达式较量巨大,一方面是因为大大都的文档没有做到由浅入深地讲授,观念上没有留意先后顺序,给读者的领略带来坚苦;另一方面,各类引擎自带的文档一般都要先容它特有的成果,然而这部门特有的成果并不是我们首先要领略的。

    文章中的每一个举例,都可以点击进入到测试页面举办测试。闲话少说,开始。

1. 正则表达式法则 1.1 普通字符

字母、数字、汉字、下划线、以及后边章节中没有非凡界说的标点标记,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之沟通的一个字符。

    举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配功效是:乐成;匹配到的内容是:"c";匹配到的位置是:开始于2,竣事于3。(注:下标从0开始照旧从1开始,因当前编程语言的差异而大概差异)

    举例2:表达式 "bcd",在匹配字符串 "abcde" 时,匹配功效是:乐成;匹配到的内容是:"bcd";匹配到的位置是:开始于1,竣事于4。

1.2 简朴的转义字符

一些未便书写的字符,回收在前面加 "\" 的要领。这些字符其实我们都已经熟知了。

表达式

 

可匹配

 

\r, \n

 

代表回车和换行符

 

\t

 

制表符

 

\\

 

代表 "\" 自己

 

尚有其他一些在后边章节中有非凡用处的标点标记,在前面加 "\" 后,就代表该标记自己。好比:^, $ 都有非凡意义,假如要想匹配字符串中 "^" 和 "$" 字符,则表达式就需要写成 "\^" 和 "\$"。

表达式

 

可匹配

 

\^

 

匹配 ^ 标记自己

 

\$

 

匹配 $ 标记自己

 

\.

 

匹配小数点(.)自己

 

这些转义字符的匹配要领与 "普通字符" 是雷同的。也是匹配与之沟通的一个字符。

    举例1:表达式 "\$d",在匹配字符串 "abc$de" 时,匹配功效是:乐成;匹配到的内容是:"$d";匹配到的位置是:开始于3,竣事于5。

1.3 可以或许与 '多种字符' 匹配的表达式

正则表达式中的一些暗示要领,可以匹配 '多种字符' 个中的任意一个字符。好比,表达式 "\d" 可以匹配任意一个数字。固然可以匹配个中任意字符,可是只能是一个,不是多个。这就比如玩扑克牌时候,巨细王可以取代任意一张牌,可是只能取代一张牌。

表达式

 

可匹配

 

\d

 

任意一个数字,0~9 中的任意一个

 

\w

 

任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个

 

\s

 

包罗空格、制表符、换页符等空缺字符的个中任意一个

 

.

 

小数点可以匹配除了换行符(\n)以外的任意一个字符

 

举例1:表达式 "\d\d",在匹配 "abc123" 时,匹配的功效是:乐成;匹配到的内容是:"12";匹配到的位置是:开始于3,竣事于5。

    举例2:表达式 "a.\d",在匹配 "aaa100" 时,匹配的功效是:乐成;匹配到的内容是:"aa1";匹配到的位置是:开始于1,竣事于4。

1.4 自界说可以或许匹配 '多种字符' 的表达式

利用方括号 [ ] 包括一系列字符,可以或许匹配个中任意一个字符。用 [^ ] 包括一系列字符,则可以或许匹配个中字符之外的任意一个字符。同样的原理,固然可以匹配个中任意一个,可是只能是一个,不是多个。

表达式

 

可匹配

 

[ab5@]

 

匹配 "a" 或 "b" 或 "5" 或 "@"

 

[^abc]

 

匹配 "a","b","c" 之外的任意一个字符

 

[f-k]

 

匹配 "f"~"k" 之间的任意一个字母

 

[^A-F0-3]

 

匹配 "A"~"F","0"~"3" 之外的任意一个字符

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7818.html