-
php正则表达式
一、正则表达式的介绍:
正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。
1、用途:匹配、查找、替换、分割
2、php提供了两套正则表达式函数库
*1. Perl 兼容正则表达式函数(推荐使用)
2. POSIX 扩展正则表达式函数
二、 语法:
表达式的格式: "/表达式/[修正符]"
解释:其中"/"表示正则表达式的定界符,但是也可以是其他符号:如”#“,”!“
注意:定界符不可以是字母、数字和斜线\。
像“#”、“|”、“!”等都可以的
如:/.../ #...# |....|
其中修正符是可选的,表示对表达式做额外的修饰。
三、正则表达式的组成部分:
1、原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。
原子包括以下内容:
> 单个字符、数字,如a-z,A-Z,0-9。
> 模式单元,如(ABC)可以理解为由多个原子组成的大的原子。
> 原子表,如 [ABC]。
> 重新使用的模式单元,如:\\1
> 普通转义字符,如:\d, \D, \w
> 转义元字符,如:\*,\.
> 元字符
*2、元字符(具有特殊意义字符):
[]
表示单个字符的原子表
例如:[aoeiu] 表示任意一个元音字母
[0-9] 表示任意一位数字
[a-z][0-9]表示小写字和一位数字构成的两位字符
[a-zA-Z0-9] 表示任意一位大小字母或数字
[^]
表示除中括号内原子之外的任何字符 是[]的取反
例如:[^0-9] 表示任意一位非数字字符
[^a-z] 表示任意一位非小写字母
{m} 表示对前面原子的数量控制,表示是m次
例如:[0-9]{4} 表示4为数字
[1][3-8][0-9]{9} 手机号码
{m,} 表示对前面原子的数量控制,表示是至少m次
例如: [0-9]{2,} 表示两位及以上的数字
{m,n}表示对前面原子的数量控制,表示是m到n次
例如: [a-z]{6,8} 表示6到8位的小写字母
* 表示对前面原子的数量控制,表示是任意次,等价于{0,}
+ 表示对前面原子的数量控制,表示至少1次,等价于{1,}
? 表示对前面原子的数量控制,表示0次或1次(可有可无) 等价于{0,1}
例如:正整数:[1-9][0-9]*
整数:[\-]?[0-9]+
email:
() 表示一个整体原子,【还有一个子存储单元的作用】。
也可以使用?:来拒绝子存储。 (?:.*?)
例如:(red) 字串red
(rea|blue) 字串red或blue
(abc){2} 表示两个abc
| 表示或的意思
(rea|blue) 字串red或blue
^ 用在正则单元块的开头处,表示必须以指定的开头
$ 用在正则单元块的结尾处,表示必须以指定的结尾
. 表示任意一个除换行符之外的字符
常用组合: .*? 表示最小匹配所有字符(拒绝贪婪匹配)
3. 普通转义字符:
\d | 匹配一个数字;等价于[0-9] |
\D | 匹配除数字以外任何一个字符;等价于[^0-9] |
\w | 匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_] |
\W | 匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_] |
\s | 匹配一个空白字符;等价于[\f\n\r\t\v] |
\S | 匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v] |
\f | 匹配一个换页符等价于 \x0c 或 \cL |
\n | 匹配一个换行符;等价于 \x0a 或 \cJ |
\r | 匹配一个回车符等价于\x0d 或 \cM |
\t | 匹配一个制表符;等价于 \x09\或\cl |
\v | 匹配一个垂直制表符;等价于\x0b或\ck |
\oNN | 匹配一个八进制数字 |
\xNN | 匹配一个十六进制数字 |
\cC | 匹配一个控制字符 |
4. 模式修整符
i 表示不区分大小写;
"/[a-zA-Z]/" <==>"/[a-z]/i"
s 表示匹配视为单行(就是可以让点.支持换行)
U 表示拒绝贪婪匹配
四、 php正则表达式函数:
preg_grep -- 返回与模式匹配的数组单元
* preg_match_all -- 进行全局正则表达式匹配 , 返回共计匹配的个数。
和下面的一样,不同的是匹配到最后(全局匹配)
* preg_match -- 进行正则表达式匹配,只匹配一次,返回1,否则0,
格式:preg_match("正则表达式","被匹配的字串",存放结果的变量名,PREG_OFFSET_CAPTURE,起始偏移量)
其中:PREG_OFFSET_CAPTURE表示获取匹配索引位置
起始偏移量:从指定位置开始匹配
preg_quote -- 转义正则表达式字符
preg_split -- 用正则表达式分割字符串
preg_replace -- 执行正则表达式的搜索和替换
实例:
1.php正则表达式匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
2.php正则的元字符匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
3.php正则表达式匹配网页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
注:使用<<< 这个是php定界符
使用格式:
1 |
|
使用定界符无需给双引号增加转义字符,可以参考如下:
$str=”/<p id=\"mainNav\" class=\"clearfix\">/”;
4正则的其他函数使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
5.子存储(扩展)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
附录
php常用正则表达式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
|