一、什么是正则
正则是匹配特定格式文本的一种模式。
一句话:
正则表达式为匹配文本的一组标记符. 说白了,就是一些字符( 元字符),匹配了多少次(重复),在哪里(位置)匹配的范式.
有几个关键字:元字符,重复,位置
二、元字符
一句话:对于以元字符转为大写为最反义,字符组中加“^”取反义,元字符本身需转义
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
反义
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
字符转义
如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.
例如:unibetter\.com匹配unibetter.com,C:\\Windows匹配C:\Windows。
三、重复
{n, m} 匹配前一项至少n次,但不超过M次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0,1}
+ 匹配前一项1次或者多次,等价于{1,}
* 匹配前一项0次或者多次,等价于{0,}
四、位置
一句话:只断言(判断)位置,不去匹配,只定位就像"^","$"。(?<=exp)exp2(?=exp3) 匹配以exp开始,以exp3结束的exp2部份。 比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分)
(?<!exp) exp2 (?!exp3) 这个相反喽。
字符“|”
用于分隔供选择的字符例如:/ab|cd|ef/
可以匹配"ab"
,“cd”
,"ef",
选择项的匹配是从左至右的如果左边的选择项匹配则停止匹配右边的。
五、常见的等
正则表达式难,有很在一部份原因是因为同一种匹配有多部写法,以下为常见的相等
\d = [0-9]
+={1,}
*={0,}
?={0,1}
\D=[^0-9]
\w=[A-Za-z_0-9]
\W=[^a-zA-Z0-9]