正则表达式纷繁复杂,权且记录一些简单规则如下:
?代表前面的字符可以出现一次或0次,也就是可有可无。
*匹配0个或多个字符
如果是ab*c这样的正则表达式,不能匹配adc,因为d不在范围内。
+匹配出现一次以上的字符。
{}花括号常用于精准匹配。ab{6}c这里指定b出现6次,{2,6}表示出现次数在2-6之间,{2,}这样代表出现两次以上。
如果句子中出现了多次ab,如abababababc,如果想要匹配,我们这样来(ab)+,这是小括号用法。
|代表“或”,用来匹配a cat或a dog的时候,用a (cat|dog),这个正则表达式中间有个空格
与“|”运算符相关的是字符类。如果匹配由a b c这几个字母构成的单词,可以写作[abc]+ 方括号里的内容代表要求匹配的字符只能取自它们。这样可以匹配aabbcc
另外可以在方括号中指定字符的范围[a-z]+代表小写的英文字符。[a-zA-Z]+代表所有的英文字符。[a-zA-Z0-9]+代表所有的英文字符和数字。
如果在方括号前加^,代表匹配除方括号内容以外的字符。如^[0-9]+代表所有非数字字符(包括换行符)。
另外,正则表达式中帮我们定义了一些常用的“元字符”
\d代表数字字符。等同于之前写的[0-9] 这里“\d”和[0-9]在不加“+”时候,都只代表匹配一个字符。
\w代表单词字符,也就是英文中的数字、字符、下划线
\s代表空白符,它同时包含tab和换行符
\D代表非数字字符
\W代表非单词字符
\S代表非空白字符。
句点“.”,代表任意字符,但不包含换行符。
^匹配行首,$匹配行尾。^a只会匹配行首的a , a$只会匹配行尾的a。还有要注意的是[^0-9],匹配的是非数字字符,所以这个符号和中括号组合,还有“非”的意思。
贪婪匹配和懒惰匹配
".+"会匹配尽可能多的字符,
<.+> 会将<span><b>This is a test program</b></span>全部匹配,因为会匹配尽可能多的任意字符,自然包括右尖号。
而<.+?> 这样就可以解决了,它会将贪婪匹配自动切换为懒惰匹配。注意,这个“?”管的是右尖号。
\b代表单词字符的边界,
如果要匹配所有出现的RGB16进制的颜色值,一共有6位,先匹配#,然后一定要a-f(大小写均可),0-9,这里我们这样来,#[a-fA-F0-9]{6}\b
#ffaaff
#ffffffffff