正则表达式



什么是正则表达式?

在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具,换句话说,正则表达式就是记录文本规则的代码。

常用工具

Regester、RegexBuddy、Javascript正则表达式在线测试工具

常用元字符

    .	    匹配除换行符以外的任意字符

    \w	    匹配字母或数字或下划线或汉字

    \s	    匹配任意的空白字符

    \d	    匹配数字

    \b	    匹配单词的开始或结束

    ^	    匹配字符串的开始

    $	    匹配字符串的结束

字符转义

如果想要查找元字符的话,必须使用 \ 来进行转义,如查找 \ ,得用 \

重复

限定符:指定数量的符号

    *       重复 0 次 或 更多次

    +       重复 1 次 或 更多次

    ?       重复 0 次 或 1 次

    {n}     重复 n 次

    {n,}    重复 n 次 或 更多次

    {n,m}   重复 n 到 m 次

[]

[aeiou] 匹配一个元音字母

[.?!] 匹配标点符号

\(?0\d{2}[)-]?\d{8} 匹配部分电话号码

注意:( 和 ) 也是元字符,如 断言

分支条件 |

分支条件:有几种规则,只要满足任意一种规则则匹配,使用 | 把不同的规则分开,如 0\d{2}-d{8} | 0\d{3}-\d{7} | \(0\d{2}\)[-]?\d{8} | 0\d{2}[-]?\d{8}

分组或子表达式

子表达式用 () 表示,如
((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) 匹配IP地址

反义

反义使用场景:查找不属于某类字符类的字符

    \W	        匹配任意 非字母、数字、下划线、汉字的字符

    \S	        匹配任意 非空白符的字符

    \D	        匹配任意 非数据的字符

    \B	        匹配 非单词开头或结束的位置

    [^x]        匹配任意 除x以外的字符

    [^aeiou]    匹配任意 非元音字母的字符

模式修正符

    i	    忽略大小写

    g	    全局匹配

    m	    多行识别

    s	    单行识别,回车换行视为普通字符

    x	    忽略模式中的空白

    A	    强制从目标字符串开头匹配

    D	    强制尾部无内容,若使用$,则不允许结尾有换行

    U	    禁止贪婪匹配,只匹配最近的一个字符串

    e	    配合PHP preg_replace()使用,将匹配来的字符串当正则表达式执行

其他

略,如断言等