正则表达式:我们可以认为它是通配符的增强版,它所做的事情就是帮我们去匹配指定规则的字符串,而且它在计算机中的应用比我们想象中的要多,下面我们讲解正则表达式的各种规则,以熟练掌握正则表达式的使用。
为了测试我们写的正则表达式,可以使用编辑器内置的搜索工具,同时在这里推荐一个在线测试工具。
限定符
- ? 代表前面出现的字符需要出现0次或1次(也就是前面这个字符可有可无)。
- * 匹配出现0个或多个字符 (也就是前面这个字符出现0次或1次或多次)。
- + 匹配出现1个及以上次数的字符。
- {n} 限定匹配大括号前面字符出现n次的字符串。
- {m,n} 限定匹配大括号前面字符出现m~n次的字符串。
- {m, } 限定匹配大括号前面字符出现m次以上的字符串。
前面限定符匹配的是一个字符,如果我们想去匹配多个重复的字符可以将多个字符放入()中,比如(ab)+代表匹配出现ab一次或多次的字符。
“或”运算符
- 比如我们想要匹配a cat或者a dog,我们可以将正则表达式写成a (cat | dog),注意**()**一定不能少,a cat | dog就变成了匹配a cat 或者 dog了。
- 字符类:
[abc]代表要求匹配方括号内的字符。
同时我们可以用[ ]来限定搜索的范围,比如:
[a-z]:匹配所有的小写字母。
[a-zA-Z]:匹配所有的字母。
[a-zA-Z0-9]:匹配所有的字母和数字。
^代表要求匹配除了^后面列出的字符的以外的字符,比如[^a-z]代表匹配所有除小写字母以外的字符(包括换行符)。
元字符
另外正则表达式中其实为我们预先定义好了一系列常用的字符类型。比如数字、空白符、单词开头、结尾等等,它们被称作元字符。
正则表达式中的大部分元字符都以 \ 开头,比如:
\d 代表数字字符,等同于前面所说的[0-9]
\D 代表所有的非数字字符
\w 代表单词字符 ,也就是所有的英文字符、数字和上下划线
\W 代表所有的非单词字符
\s 代表“空白”符,它同时包含Tab以及换行符。
\S 代表非“空白”符
. 代表任意字符,但是不包含换行符
^ 只会去匹配行首字符,比如^a只会去匹配行首的a
$ 只会去匹配行尾字符,比如a$只会去匹配行尾的a
贪婪与懒惰匹配
- 比如我们想要匹配文本中出现的所有十六进制RGB颜色值:首先需要匹配#,由于代表每一个颜色值得字符都是十六进制,所以它们只能取自a-f或者A-F或者0-9,并且字符一定要出现6次,最后我们可以在表达式末尾加入\b来代表单词字符的边界,避免不符合要求的文本也被识别成RGB颜色值。综上所述:#[a-fA-F0-9]{6}\b
- IP地址的匹配,Ipv4的地址实际上是由四段数字构成,数字之间由点号隔开。
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
说明:IP地址四段数字,每一段数字都不大于255,上述表达式可以分成25开头,2开头和0或1开头,当25开头时第三位数字只能是0-5,当2开头时第二位数字是0-4,则第三位数字可以为任意数字,当以0或1开头时,第二位数字和第三位数字可以为任意数字,然后需要匹配点号,由于点号属于特殊字符,因此我们需要加一个转义符,前三个数字匹配方式是一样的,因此我们只需要将前面的匹配表达式重复三遍即可,需要注意的是最后一位数字后面没有点号,因此我们需要单独将没有点号匹配的前一段表达式没有匹配点号的部分再复制一遍即可,最后用\b来限定单词字符的边界。
上面介绍的只是最基本的正则表达式的用法,如果想要更深入了解正则表达式,推荐下面的教程正则表达式30分钟入门教程 作者:deerchao。