PHP正则表达式 1. preg_match 函数
用于执行一个正则表达式匹配。正则表达式描述了一种字符串匹配的模式,通过这个模式在特定的函数中对字符串进行匹配、查找、替换及分割等操作。作为一个匹配模板,是由原子、特有功能字符及模式修正符三部分组成的文字模式。
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 元字符:具有特殊含义的字符,如 ^(开始)和 $(结束); 原子:用来匹配的字符,如果 \d(匹配0到9); 定界符:除了字母、数字和反斜线‘\’以外的任何字符都可以作为定界符,如 #、!等都是可以作为定界符,但是行业习惯这样做:/正则表达式/。 元字符 含义 * 0次1次或多次 + 1次或多次 ? 0次或1次 . 除了换行外的其他字符 | 或选择 {n} 正好n次 {n,} 不少于n次 {n,m} 区间,>=n,<=m ^或\A 正则的开始 $或\Z 正则的结束 \b 单词的边界 \B 单词边界以外 [] 其中任意一个 [^] 除了[]中的以外 () 作为一个整体 原子:一些特殊符号,如:* ’ ” + \等,需要使用 \ 来进行转义。 原子字符 含义 举例 \cx 匹配由x指明的控制字符 如 \cM匹配一个回车符,x的值必须为A~Z或a~z之一,否则将c视为匹配‘c’ \f 匹配一个换页符 \n 匹配一个换行符 \r 匹配一个回车符 \t 匹配一个指标符 在不使用表格的情况下在垂直方向按列对齐文本 \v 匹配一个垂直制表符 \d 0到9任意一个数字 等价于[0-9] \D 除0到9之外的字符 等价于[^0-9] \s 空白字符 等价于[\f\n\r\t\v] \S 除了空白字符 \w 数字、字母或下划线 [0-9a-zA-Z] \W 除了数字、字符或下划线 可以理解为特殊字符,如*、$等 模式修正符:在最后一个细线‘/’之后使用,如 /php/i 模式修正符 含义 i 不区分大小写 m 将字符视为多行 s 将字符串视为单行,换行符作为普通的字符 x 忽略空白 U 取消贪婪模式,等同于在数量符之后添加一个问号,比如 .*? 后向引用:使用()时,会将其相关的匹配存储到一个临时的缓存区,缓存区编号从1-99,使用 \1(“\1”)来获取缓存区内容,可以使用 ?: 或 ?= 或 ?! 来忽略相关的缓存内容。 /(windows)(linxu)\2/ 这样是使用第二个缓存区的内容,linux; /(?:windows)(linux)\1/,忽略了第一缓存区的内容,linux。 贪婪模式:概念不好解释,直接上代码去理解 $str = '发财123发财发财456发财发财abc发财'; $pattern = '/发财.*发财/'; // 匹配始末发财中的内容 $pattern2 = '/发财.*?发财/'; // 匹配所有发财中的内容 $pattern3 = '/发财.*发财/U'; // 效果等同上一行 preg_match_all($pattern, $str, $matches); preg_match_all($pattern2, $str, $matches2); preg_match_all($pattern3, $str, $matches3); var_dump($matches); var_dump($matches2); var_dump($matches3); 中文匹配:这个不常用到,知道要点即可。 - UTF-8汉字编码范围是:0x4e00–0x9fa5,使用 u 模式修正符使字符串被当成UTF-8。 - gb2312汉字编码范围是:0xb0–0xf7,0xa1–0xfe,使用 chr 将其转为字符串。 常用函数:preg_match、preg_match_all preg_match返回0或者1,它在完成第一次匹配后停止搜索;preg_match_all会一直匹配目标到结束;如果如果发生错误preg_match()返回 FALSE。
语法:
1 int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
举例:
查找文本字符串”php”:
1 2 3 4 5 6 7 8 <?php if (preg_match ("/php/i" , "PHP is the web scripting language of choice." )) { echo "查找到匹配的字符串 php。" ; } else { echo "未发现匹配的字符串 php。" ; } ?>
结果如下:
查找到匹配的字符串 php。
查找单词 “web”:
模式中的 \b 标记一个单词边界,所以只有独立的单词”web”会被匹配,而不会匹配 * 单词的部分内容比如”webbing” 或 “cobweb”
1 2 3 4 5 if (preg_match ("/\bweb\b/i" , "PHP is the web scripting language of choice." )) { echo "aaa\n" ; } else if (preg_match ("/\bweb\b/i" , "PHP is the website scripting language of choice." )){ echo "bbb\n" ; }
结果如下:
aaa
bbb
参考资料
https://blog.csdn.net/yb546822612/article/details/90671244
https://blog.csdn.net/xiaolinyui/article/details/134892835