烦人的正则表达式(一)

正则表达式,口语化一点就是匹配。我初学编程语言时对此是非常反感,觉得太复杂了,通读性太差了,符号括号太多看的我糊里糊涂。我实操写的第一个网页使用的正则表达式还是直接百度复制黏贴过来的,而现在我打算迈过这道坎。

等价字符:

? 相当于匹配0次或1次 {0,1}
* 相当于匹配0次或1次或多次 {0,}
+ 相当于匹配1次或多次 {1,}
\d 相当于[0-9],匹配0至9
\w 相当于[a-zA-Z0-9_],匹配大小写26个字母及数字和下划线
\s 匹配空白字符
\n 匹配换行

常用运算符与表达式

^ 开始标识符
() 域段,标记子字符串的开始和结束位置
[] 包含,默认是一个字符长度,方括号中匹配不需要加转义符号\
[^] 不包含,默认是一个字符长度
{n,m} 匹配n到m个字符长度,可以只填一个值
. 任何单个字符
| 或
\ 转义符号,在特殊符号前添加表示匹配特殊符号,如\?,\*匹配?和*,\\d匹配\d
$ 结尾标识符

定位符

\b 匹配字符串边界,如\b123\b只能匹配到123,不能匹配到0123或1234
\B 匹配非单词边界,如\Bend可匹配send,不能匹配end

使用简单示例说明

ab* => a , ab , abbb…
ab+ => ab , abb , abbb…
ab? => a , ab
a?b+ => b , ab , bb… , abbb…

a{3} => aaa
a{3,} => aaa , aaaa , aaaa…
a{3,5} => aaa , aaaa , aaaaa
{}指定范围可以不标明上限,但必须标明下限,最小为{0,}

aaa|bbb => aaa or bbb
(aa|bb)cc => aacc or bbcc
(a|b)*cc => acc or bcc or aaacc or bbbcc …
[a,b,c] => (a|b|c) => a , b , c

a.[0-9] => ab0 , ae0 [.可匹配任意字符]
^.{3,5}$ => 有3-5个任意字符的字符串

/^ $/成对使用表示整个字符串完全符合匹配定义的规则,不只是匹配字符串中的一个子字符串