正则表达式其实就是一种字符串匹配。
字符组:能在一个位置上匹配的字符组,一个[]只能匹配一个字符,即可能在一个位置上出现的各种字符。
如[1234567890]只能匹配字符串'188031'中的第一个数字,即1。
用[x-y]指代x-y范围内所有的数字、字母。如[0-9]指代全部数字;[a-z]指代全部小写字母;[0-9 a-z A-Z]指代所有数字及大小写字母;[0-9 a-f A-F]可以验证十六进制;[A-z]可匹配所有大小写字母,但是这个匹配按照ascii表来,所以还会包含一部分其他符号。
如果在指代范围的同时还想匹配代表范围的-符号,可以用\转义,如[0-9 \-]代表匹配所有数字及-符号。
元字符:
.匹配除换行符之外的其他任意字符
\w匹配任意数字字母下划线 \W匹配非数字字母下划线
\s匹配所有空白符 \S匹配非空白符
\d匹配所有数字 \D匹配非数字
\n匹配换行符 \N匹配非换行符
\t匹配制表符 \T匹配非制表符
\b匹配一个单词的结尾
^匹配字符串开始
$匹配字符串结尾
|或 即a|b匹配a或b,abc|b匹配abc或b,注意如果是ab|abc则只匹配ab,应把长的放到左边方便完整匹配。
\b应和其他字符组合使用,如匹配结尾为g的单词则是 g\b。
任意一对大小写元字符即可匹配全局。
开始字符只匹配开始,结束字符只匹配结束,开始字符和结束字符同时约束整条正则里的所有内容。
量词:
*重复零次或多次
+匹配一次或多次
?匹配零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
所有量词在正则匹配后面,量词后面加?是非贪婪匹配(惰性匹配),正则默认为贪婪匹配。
字符集:
刘[李王张]*匹配刘后面李王张任意次数
李[^和]*匹配李后面不是和的字符任意次
[\d] 一个 [\d]+ 多个
([abc],[123])*匹配相应顺序的字符0或无数次 ()把多个字符集合为一体
常用非贪婪匹配:
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,}?重复n次以上,尽可能少重复
{n,m}?重复n到m次,尽可能少重复
.*? 任意字符 匹配0-无限次 非贪婪匹配
实例:.*?x取任意长度直到第一个x出现