一、定界符
定界符由一对相同的符号组成,可以是//,也可以是任意非字母、非数字、非反斜线、非空白字符 ,如@@,经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)。
$reg = '/\d/';
$reg = '@\d@';
$reg = '!!';
二、原子
原子是指任意一个字符,具体的原子表示如下:
\d 任意一个数字
\D 任意一个非数字
\w 字母、数字、下划线中的任意一个
\W 字母、数字、下划线外的任意一个
\s 任意一个空白(空格、换行符、换页符、回车符、字表符)
\S 任意一个非空白
. 点代表任意一个原子(注意有贪婪原则,这个在后面会有介绍,默认是不匹配换行,需要配合s模式修正符使用)
[] 自己定义一个原子,一个字符
自己定义原子:(中括号内的都是小原子,一个字符)
自己定义的原子放在一对中括号内[]
[a-zA-Z] 表示匹配任意一个大写或小写字母,注意是匹配个字母
[1234] 表示匹配1234中任意一个数字
自己定义原子时,^表示除了什么之外
[^a] 表示匹配除了a之外的
说明:在小括号内,所有想匹配的特殊字符都要使用\进行转义
三、元字符
用来修饰原子的,一般表示匹配几个原子或以什么原子开始或以什么原子结束
* 表示0个或1个或多个 {0,}
+ 表示1个或多个 {1,}
? 表示0个或1个 {0,1}
{n,m} 表示n到m个,包含边界
{n,} 表示n个或n个以上
| 或,表示两边的原子有一个出现即可,注意或的优先级最低[123|abc],表示匹配123abc中的任意一个原子,不是匹配123或abc,如果想匹配123或abc,需要将小原子变成大原子,(123)|(abc),注意一定不能在外面再加中括号,否则依据|优先级最低的原则,可以匹配到123或1 2 3中的任意一个
^ 以什么开头
$ 以什么结束
\b 是单词边界
\B 不是单词边界
()
第一个作用,改变优先级;
第二个作用,将小原子变成大原子;(?:) 把括号只作为改变优先级,和变成大原子,没有子模式作用,取消子模式作用,如(?:abc)只是起匹配abc大原子的作用,不能起到子模式的作用
第三个作用,子模式,整个表达式是一个大的模式,小括号中是每个独立的子模式,(.*?)代表所有原子的子模式,并且这样可以防止贪婪匹配,在要匹配的原子后面加上一个?号即可取消贪婪匹配
第四个作用,反向引用,\1 引用第一个子模式,\2引用第二个子模式
$n 在正则表达式外表示反向引用,n代表第几次匹配到的结果。
四、模式修正符号
1、模式修正符号写在定界符外,放在右边 '//i' i不区分大小写
2、模式修正符,一个字符就是一个功能,可以组合使用
模式修正符号作用,可以修正正则表达式的解释,或扩充了正则表达式的功能
i 修正正则表达式,不区分大小写
m 视为多行,在使用^或$这两个符号时,每一行满足都可以
s 修正正则表达式中的.可以匹配换行符号了
x 修正正则表达式可以省略空白
(.*) (.+)
U 修改正则表达式取消贪婪模式,一般不用这个,用另一种方法,(.*?)在*后加一个?也可以防止贪婪
五、一些需要进行转义的符号
/
$
^
$^*()+={}[]|/:<>.?'"
正则表达式的编写
1、就是一种语言,开发思想放进去
2、列需求(举自己的所能想到的所有例子,一点点合理复杂自己得到的例子)
分割 匹配 查找 替换
1、字条串处理函数(处理快,但有一些做不到)
2、正则表达式函数(功能强大,但效率低一些)
strstr();返回字符串
strpos();返回字符串首次出现的数字位置
preg_match('/\d/', $str, $match);
想要取到匹配到东西,需要使用子模式
注意:如果可以直接使用字符串处理的函数处理字符,就不要使用正则处理
正则表达式一般用于验证表单提交
preg_match_all() 与preg_grep()
匹配和查找
preg_match() 返回匹配的第一个字符串,不再向下继续找
preg_match_all() 返回所有匹配的内容
preg_grep() 在数组元素中进行匹配,返回找到的元素
分割
explode(); implode();
preg_split()
9:36 2017/3/17
替换
str_replace()
strtoupper();
preg_replace() 在被替换的地方可以使用子模式