Loading... 正则表达式语法 一、原子 原子 描述 普通字符 可打印的字符,在屏幕可看到的字符,如大小写字母、数字等 非打印字符 即存在但不可显示字符,如回车、换行、制表符等 自定义字符 可以是一个,也可以是集合,用方括号'[ ]'包起来 1.普通字符 示例 描述 a-z 匹配单个小写字母 A-Z 匹配单个大写字母 0-9 匹配单个数字 代码示例: $pattem = '/a/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 2.非打印字符 示例 描述 \n 匹配一个换行符,等价于:\x0a \r 匹配一个回车符,等价于:\x0d \f 匹配一个换页符,等价于:\x0c \t 匹配一个制表符,等价于:\x09 \v 匹配一个垂直制表符,等价于:\x0b 代码示例: $pattem = '/\n/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 3.自定义字符 示例 描述 [1234] 匹配 1、2、3、4 数字 [0-9] 匹配数字集合 [a-z] 匹配小写字母集合 [A-Z] 匹配大写字母集合 [0-9a-zA-Z] 匹配数字、小写字母、大写字母集合 代码示例: $pattem = '/[a-z]/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 二、元字符 元字符是修饰原子字符的,可以理解为原子的定语或限定条件 元字符不允许单独使用,必须配合原子,共同工作 ( . ) 括号里的匹配符,匹配除换行符之外的任意一个字符 示例 描述 12. 匹配两个数字,在加任意一个字符 zhu. 匹配两个小写字母,在加任意一个字符 OU. 匹配两个大写字母,在加任意一个字符 代码示例: $pattem = '/12./'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk OUYANGKE OUYANGKE zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( | ) 括号里的匹配符,匹配 2 个或多个分支 示例 描述 12|67 匹配 12 和 67 ou|zhu 匹配 ou 和 zhu 代码示例: $pattem = '/12|67/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( [ ] ) 括号里的匹配符,匹配方括号内指定的任意一个原子 示例 描述 [1234] 匹配 1、2、3、4 数字 [0-9] 匹配数字集合 [a-z] 匹配小写字母集合 [A-Z] 匹配大写字母集合 [0-9a-zA-Z] 匹配数字、小写字母、大写字母集合 代码示例: $pattem = '/[1234]/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( [^ ] ) 括号里的匹配符, 匹配除方括号内指定原子以外的任意一个原子 示例 描述 [^1234] 匹配去除 1、2、3、4 数字 [^0-9] 匹配去除数字集合 [^a-z] 匹配去除小写字母集合 [^a-z] 匹配去除大写字母集合 [^0-9a-za-z] 匹配去除数字、小写字母、大写字母集合 代码示例: $pattem = '/[^1234]/'; $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( ^ ) 括号里的匹配符,匹配字符串开始位置,一串字符串,必须从这里开始 示例 描述 ^1 匹配从 1 数字开始 ^[0-9] 匹配从数字集合开始 ^[a-z] 匹配从小写字母集合开始 ^[A-Z] 匹配从大写字母集合开始 ^[0-9a-zA-Z] 匹配从数字、小写字母、大写字母集合开始 代码示例: $pattem = '/^[a-z]/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( $ ) 括号里的匹配符,匹配字符串结束位置 示例 描述 [0-9]$ 匹配从数字集合结束 [a-z]$ 匹配从小写字母集合结束 [A-Z]$ 匹配从大写字母集合结束 [0-9a-zA-Z]$ 匹配从数字、小写字母、大写字母集合结束 代码示例: $pattem = '/[a-z]$/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 三、量词(限定符) {n} 表示前面原子出现 n 次 示例 描述 [0-9]{3} 匹配从数字连续出现 3 次 [a-z]{3} 匹配从小写字母集合连续出现 3 次 [A-Z]{3} 匹配从大写字母集合连续出现 3 次 [0-9a-zA-Z]{3} 匹配从数字、小写字母、大写字母集合连续出现 3 次 代码示例: $pattem = '/[0-9]{3}/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 {n,} 表示前面原子出现不少于 n 次 示例 描述 [0-9]{1,} 匹配从数字连续出现 1 次或多次 [a-z]{1,} 匹配从小写字母集合连续出现 1 次或多次 [A-Z]{1,} 匹配从大写字母集合连续出现 1 次或多次 [0-9a-zA-Z]{1,} 匹配从数字、小写字母、大写字母集合连续出现 1 次或多次 代码示例: $pattem = '/[0-9]{1,}/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 {n,m} 表示前面原子至少出现 n 次,最多出现 m 次 示例 描述 [0-9]{1,3} 匹配从数字连续出现 1 次或 3 次 [a-z]{1,3} 匹配从小写字母集合连续出现 1 次或 3 次 [A-Z]{1,3} 匹配从大写字母集合连续出现 1 次或 3 次 [0-9a-zA-Z]{1,3} 匹配从数字、小写字母、大写字母集合连续出现 1 次或 3 次 代码示例: $pattem = '/[0-9]{1,3}/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( * ) 匹配 0 次、1 次或多次前面原子 示例 描述 [0-9]* 匹配从数字连续出现 0 次、1 次或多次 [a-z]* 匹配从小写字母集合连续出现 0 次、1 次或多次 [A-Z]* 匹配从大写字母集合连续出现 0 次、1 次或多次 [0-9a-zA-Z]* 匹配从数字、小写字母、大写字母集合连续出现 0 次、1 次或多次 代码示例: $pattem = '/[0-9]*/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( + ) 匹配 1 次或多次前面原子 示例 描述 [0-9]+ 匹配从数字连续出现 1 次或多次 [a-z]+ 匹配从小写字母集合连续出现 1 次或多次 [A-Z]+ 匹配从大写字母集合连续出现 1 次或多次 [0-9a-zA-Z]+ 匹配从数字、小写字母、大写字母集合连续出现 1 次或多次 代码示例: $pattem = '/[0-9]+/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 (?) 匹配 0 次或 1 次前面原子 示例 描述 [0-9]? 匹配从数字连续出现 0 次或 1 次 [a-z]? 匹配从小写字母集合连续出现 0 次或 1 次 [A-Z]? 匹配从大写字母集合连续出现 0 次或 1 次 [0-9a-zA-Z]? 匹配从数字、小写字母、大写字母集合连续出现 0 次或 1 次 代码示例: $pattem = '/[0-9]?/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 四、预定义字符 \d 匹配任意一个十进制数 等价于 [0-9] 代码示例: $pattem = '/\d/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 \D 匹配任意一个除十进制以外的字符 等价于 [^0-9] 代码示例: $pattem = '/\D/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 \w 匹配任意一个字母/数字/下划线字符 等价于 [0-9a-zA-Z_] 代码示例: $pattem = '/\w/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 \W 匹配任意一个除字母/数字/下划线之外的字符 等价于 [^0-9a-za-z_] 代码示例: $pattem = '/\W/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 \s 匹配任意一个空白字符(非打印) 代码示例: $pattem = '/\s/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 \S 匹配任意一个除空白字符以外的字符 代码示例: $pattem = '/\S/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 \b 匹配单词边界 代码示例: $pattem = '/ouyangke\b/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 \B 匹配除单词边界以外的部分 代码示例: $pattem = '/yang\B/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 五、特殊字符 特殊字符需要在符号前面增加\转义 需转义符号: \ * + ? . | ^ $ 代码示例: $pattem = '/ \+ /'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk * + ? . | ^ $ [ ] ( ) ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 六、分组符 ( ) 匹配其整体为一个原子[模式单元],即多个原子组成的大原子 代码示例: $pattem = '/(欧阳克|朱老师)|([0-9])/'; $subject = '我是欧阳克 我是朱老师 asdfsdf212fdhdfgh54674fghjfghjk78907dfghdfghdfgh'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 七、界定符 / / 符号是正则表达式的界定符,里面包裹正则表达式。 八、修正符(在界定符后面) 多个修正符可以组合在一起使用 ( U ) 表示取消贪婪模式 正则表达式有:贪婪模式和懒惰模式 正则表达式默认是贪婪模式 代码示例 1: $pattem = '/ou.*/'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 代码示例 2: $pattem = '/ou.*/U'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( i ) 表示和模式进行匹配时忽略大小写 代码示例: $pattem = '/ouyangke/i'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( s ) 被匹配的字符串将视为一行来看,包括换行符,换行符将被视为普通字符串。 ( . ) 括号里的匹配符,匹配除换行符之外的任意一个字符 代码示例: $pattem = '/OUYANG.KE/s'; $subject = "a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANG\nKE OUYANG\nKE ZHULAOSHI ZHULAOSHI"; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 ( x ) 模式中的空白忽略不计 代码示例: $pattem = '/ 0 0 0/x'; $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI'; $a = preg_match_all($pattem,$subject,$matches); var_dump($a); // 输出匹配次数 var_dump($matches); // 输出匹配结果 九、正则表达式优先级(1 级最大) 级别 符号 解释 1 \ 转义字符 2 ( )、 ( ?: )、 ( ?= )、 [ ]、 模式单元与原子表 3 *、 +、 ?、 {n}、 {n,}、 {n,m} 重复匹配 4 ^、 $、 \b、 \B 边界匹配 5 | 模式选择 Last modification:January 15, 2023 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏