Back

正则表达式

2016-02-28更新

正则知识脑图

正则基本语法介绍:

语法:(与perl兼容)默认是贪婪模式

  1. 定界符:除字母,数字和反斜线“\”之外的任何字符均可,如/、|、{}、#等,常用:/

/正则内容/


  1. 原子:最小的一个匹配单位(放在定界符中),在一个正则表达式中,至少要有一个原子!

          原子是正则表达式的最基本的组成单元,而且在每个模式中最少要包含一个原子。

          原子是由所有那些未显示指定为元字符的打印(键盘输入的)和非打印字符(如回车未打印出来)组成,具体分为5类:

    1. 普通字符作为原子:如a~z、A~Z、0~9等,如:/3/、/a/

    2. 一些特殊字符和转义后元字符作为原子,语意特殊的符号需要转义(\)后才可作为原子,如:\”、\’、\*、\+、\?、\.等

    3. 一些非打印字符作为原子:

      如:\f(换页符)、\n(换行符)、\r(回车符)、\t(制表符)、\v(垂直制表符)、

      \cx(匹配由x指定的控制字符,如\cM匹配一个Control-M或回车符。x的值必须为A~Z或a~z之一)

    4. 使用“通用字符类型”作为原子:

      如:

      \d(任意一个数字,[0-9])、\D(任意一个非数字,如字母,空格等,[^0-9])

      \w(任意一个字,a-z,A-Z,0-9,_,[a-zA-Z])、\W(任意一个非字,如@&*#()%@#,[^a-zA-Z])

      \s(代表空白,空格,回车,制表符等,[\t\n\f\v])、\S(任意一个非空白,[^\t\n\f\v])

      .:所有的原子

    5. 自定义原子表([])作为原子:[]:中括号表示里面的任意一个

      如:

      [abc]:a或b或c,一个字

      [a-zA-Z]:a到z或A-Z的任意一个字符

      ^:除列表之外的:’/[apj]sp/‘、’/[^apj]sp/‘,必须放在开头


  1. 元字符:不能单独使用,修饰原子用来拓展原子的功能(对单个原子)

如:

  1. 模式修正符号
    对模式(正则)进行修正或扩充
    在定界符外(对整个正则)
    一个字符就是一个功能,可以组合使用

如:

综上

正则的基本知识介绍完毕。下面介绍几个例子:

注意:效率问题,尽量少用正则,尽量使用基本字符串函数。



PHP字符串函数介绍:

查找:

分割:

替换:

其他正则函数:


此处列出一点glob匹配的语法,与之比较:

glob通配符:

*:任意多个任意字符匹配

?:仅与一个任意字符匹配

[…]:同方括号中的任意一个字符相匹配。这些字符可以用字符范围(比如 1-9)或者离散值或同时使用两者表示。例如:[a-zBE5-7] 同所有 a 到 z 之间的字符和 B、E、5、6、7 相匹配。

:与所有不在方括号中的某个字符匹配。例如 [!a-z] 同某个非小写字母相匹配[5];

{c1,c2}:同c1或者c2相匹配。其中c1和c2也是通配符。因此,您可以使用{[0-9]*,[acr]}。如:*[!a-z]:当前目录中不以小写字符结尾的全部文件。