PHP正则表达式
2022-07-28 14:58:37
234
{{single.collect_count}}

一、正则表达式语法(Perl风格)

1、模式规则
  /php/ 字符串前后加上两条斜杠即可

2、匹配函数
   preg_match(’/php/’,php)
  参数1 模式
  参数2 字符串


二、正则表达式中的元素

介绍
  1、正则表达式中包含三种元素分别为:量词、元字符、修饰符
  2、前导字符串:就是符号前面的一个字符或字符串

量词

量词说明
+匹配任何至少包含一个前导字符串
*匹配任何包含零个或多个前导字符串
?匹配任何包含零个或1个前导字符串
.匹配任意一个字符串
{x}匹配任何包含x个前导字符串
{x,y}匹配任何包含 x 到 y 个前导字符串
{x,}匹配任何包含至少x个前导字符串
^匹配字符串的行首
$匹配字符串的行尾
|选择符 匹配字符串的左边或者右边
()分组,提取

//量词//preg_match()函数匹配成功返回1,失败返回0echo preg_match('/a+/','abc');//返回1echo preg_match('/a*/','abc');//返回1echo preg_match('/a?/','abc');//返回1echo preg_match('/./','abc');//返回1echo preg_match('/a{2}/','aabc');//返回1echo preg_match('/a{2,5}/','aaabc');//返回1echo preg_match('/a{2,}/','aaaaabc');//返回1echo preg_match('/^a/','bac');//返回0echo preg_match('/^a/','abc');//返回1echo preg_match('/a$/','abc');//返回0echo preg_match('/a$/','cba');//返回1echo preg_match('/a|b/','a');//返回1echo preg_match('/a|b/','b');//返回1echo preg_match('/(abc)+/','abcd');//返回1

元字符

元字符说明
[a-z]匹配任何包含小写字母a-z的字符串
[A-Z]匹配任何包含大写字母A-Z的字符串
[0-9]匹配任何包含0-9的字符串
[abc]匹配任何包含小写字母a,b,c的字符串
[^abc]匹配任何不包含小写字母a,b,c的字符串
[a-zA-Z0-9_]匹配任何包含a-zA-Z0-9和下划线的字符串
\w匹配任何包含a-zA-Z0-9和下划线的字符串
\W匹配任何不包含a-zA-Z0-9和下划线的字符串
\d匹配任何包含数字字符
\D匹配任何非数字字符
\s匹配任何空白字符
\S匹配任何非空白字符
\b匹配是否到达了单词边界
\B匹配没有到达了单词边界
\匹配正则中的特殊字符

//元字符echo preg_match('/[a-z]/','abc');//返回1echo preg_match('/[A-Z]/','ABC');//返回1echo preg_match('/[0-9]/','123');//返回1echo preg_match('/[abc]/', 'a');//返回1echo preg_match('/[^abc]/', 'd');//返回1echo preg_match('/[a-zA-Z0-9_]/', 'aD45_');//返回1echo preg_match('/\w/', 'aD45_');//返回1echo preg_match('/\W/', 'aD45_');//返回0echo preg_match('/\d/', '123456');//返回1echo preg_match('/\D/', '123456');//返回0echo preg_match('/\d/', '123456');//返回1echo preg_match('/\s/', ' ');//返回1echo preg_match('/\S/', ' ');//返回0//单词尾部边界echo preg_match('/at\b/', 'cat');//返回1//头单词部边界echo preg_match('/\bat/', 'attribute');//返回1//没有到达边界echo preg_match('/\Bat/', 'attribute');//返回0//特殊字符 $ ^ * () + = {} [] | \\ : <>echo preg_match('/\$/', '$');//返回1

修饰符

修饰符说明
i完全不区分大小写
m可以采用多行识别,遇到换行也承认匹配规则
x忽略掉规则模式中的空白字符
A强制从头开始匹配
U禁止贪婪匹配,只跟踪到最近的一个匹配符并结束

//修饰符//i 不区分大小写echo preg_match('/abcd/','AbcD');//返回0echo preg_match('/abcd/i','AbcD');//返回1 //m 多行识别 $str = '1a1a';preg_match_all('/^1a/',$str,$arr);print_r($arr);//结果为Array ( [0] => Array ( [0] => 1a ) )//默认从头到尾匹配,所以只匹配到一个preg_match_all('/^1a/m',$str,$arr);//返回1print_r($arr);//结果为Array ( [0] => Array ( [0] => 1a [1] => 1a ) )//每行都会使用规则,所以匹配的到二个,注意第二行前面不要有空格避免干扰//x 忽略模式的空格echo preg_match('/a b/','ab');//返回0echo preg_match('/a b/x','ab');//返回1//A 强制开头匹配echo preg_match('/ab/','catabc');//返回1echo preg_match('/ab/A','catabc');//返回0echo preg_match('/ab/A','abcdef');//返回1//U 禁止贪婪匹配preg_match_all('/php\w+php/','php123phpphp456php',$arr);print_r($arr);//结果为Array ( [0] => Array ( [0] => php123phpphp456php ) ) preg_match_all('/php\w+php/U','php123phpphp456php',$arr);print_r($arr);//结果为Array ( [0] => Array ( [0] => php123php [1] => php456php ) )//禁止贪婪匹配后,会就近匹配

三、Perl风格函数

1、preg_grep()
  搜索数组中的所有元素,返回与某个模式匹配的字符串数组

2、preg_match()
  搜索模式,匹配返回true,不匹配返回false

3、preg_match_all()
  在字符串匹配模式的所有出现,然后将所有匹配的全部放入数组

4、preg_quote()
  将特殊字符转义
  特殊字符包含 $ ^ * () + = {} [] | \ : <>
  定界正则,在每一个对于正则表达式语法而言有特殊含义的字符前插入一个反斜杠

5、preg_replace()
  替换模式的所有出现,然后替换成想要的字符串返回出来

6、preg_split()
  以不区分大小写将字符串划分不同的元素

//风格函数//preg_grep()$arr = array('php5','php6','php7','css','html');$out = preg_grep('/php[0-9]/', $arr);print_r($out);//结果为Array ( [0] => php5 [1] => php6 [2] => php7 )//preg_match()echo preg_match('/php[0-9]/','php5');//返回1//preg_match_all()preg_match_all('/php[0-9]/','php5php6php7',$arr);print_r($arr);//结果为Array ( [0] => Array ( [0] => php5 [1] => php6 [2] => php7 ) )//preg_quote()echo preg_quote(' $ ^ * () + = {} [] | \\ : <>');//结果为 \$ \^ \* \(\) \+ \= \{\} \[\] \| \\ \: \<\>//preg_replace()echo preg_replace('/php/','python', 'php1php2php3');//结果为 python1python2python3//preg_split()$str = preg_split('/a/', 'cbabc');print_r($str);//结果为rray ( [0] => cb [1] => bc )

学习总结

  学习好正则表达式,不是一朝一夕的事,要掌握好这些基本的元素。量词、元字符、修饰符,每个都不能忽视,搭配起来使用,多多练习才能熟能生巧。

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}