博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP正则表达式
阅读量:5879 次
发布时间:2019-06-19

本文共 2571 字,大约阅读时间需要 8 分钟。

正则表达式是什么

  • 是一种字符串处理的工具(搜索匹配、搜索替换、搜索分割)

  • 功能强大,是一种规则

正则表达式应用范围

  • 数据验证

  • 数据处理/过滤

  • 数据查询

  • 各语言(js/php/java/c#)都支持

正则表达式PHP相关函数

  • preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

  • preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) //正则表达式一个匹配,返回匹配结果的次数

  • preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] ) //执行一个全局正则表达式匹配,返回匹配结果的次数

  • preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) //执行一个正则表达式的搜索和替换

  • preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) //执行一个正则表达式搜索并且使用一个回调进行替换

  • preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ) //通过一个正则表达式分隔字符串

  • preg_quote ( string $str [, string $delimiter = NULL ] ) //转义正则表达式字符

  • preg_grep ( string $pattern , array $input [, int $flags = 0 ] ) //返回给定数组input中与模式pattern匹配的元素组成的数组.

正则表达式组成

  • 定界符

一般使用'/',但不限于此除字母、数字、反斜杠'\'的其他字符都可以作为定界符
  • 原子

.  匹配除换行符之外任意字符\d 匹配任意一个十进制数字\D 匹配任意一个非十进制数字\s 匹配一个不可见原子\S 匹配一个可见原子\w 匹配任意一个数字、字母或下划线[a-zA-Z0-9_]\W 匹配任意非一个数字、字母或下划线[^a-zA-Z0-9_][] 作为一个原子,匹配[]之间的一个原子[^] 作为一个原子,不能匹配[]之间的一个原子
  • 元字符

//量词{n} 匹配原子恰好出现n次{n,} 匹配原子出现不少于n次{n,m} 匹配原子出现至少n次,最多m次* 相当于{0,}+ 相当于{1,}? 相当于{0,1}//边界限制^ 指定匹配的字符串以什么原子开头$ 指定匹配的字符串以什么原子结尾//模式选择符| 多选一//模式单元() 多原子作为一个大原子
  • 模式修正符

i //不区分大小写s //正则表达式中.匹配所有字符,包括换行符U //匹配模式变为懒惰模式(只有PHP有,其他语言不兼容,请使用.*?)x //空白忽略

preg_filter与preg_replace区别

  • 当匹配的目标数据是数组时,preg_filter只返回匹配的数组元素,preg_replace返回所有数组元素

正则表达式例子

  • 非空判断

$pattern = '/\\S+/';$ret = preg_match($pattern,' ');//false为空
  • 去除空格

$str = '你是谁       2  年后';$pattern = '/\\s+/';$ret = preg_replace($pattern,'',$str);
  • 手机号匹配

$pattern = '/^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])\\d{8}$/';//匹配移动$pattern = '^1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])\\d{8}$';//匹配联通$pattern = '^1(3[0-2]|4[5]|5[56]|7[0156]|8[56])\\d{8}$';//匹配电信$pattern = '^1(3[3]|4[9]|53|7[037]|8[019])\\d{8}$';
  • email匹配

$pattern = '/^(\w)+(\.\w+)*@(\w)+(\.\w+)+$/';
  • URL验证(http/https)

$pattern = '/^https?\:(\w+\.)+[a-z]+$/';

正则表达式使用场景——模板引擎

  • 实现原理

1、获取模板源文件2、编译模板并输出到文件(用正则替换,文件讲保存编译后的模板代码html+php)3、执行编译后的模板文件(将得到html,如果要做静态化就在此步)4、输出模板
  • 简单实现步骤

1、建立2个文件夹(一个存放模板源文件、一个存放模板编译文件)2、读取模板源文件 $outputHtml = file_put_contents($filePath);3、使用正则进行模式替换,然后用一个新文件存储起来
  • 正则进行模式替换

$str = '测试:{
{$test}}';$pattern = '/\{\{ *\$(\w+) *\}\}/';$arr = preg_replace($pattern,'
',$str);//最后$arr="测试:
"//除可以使用\\1,也可以使用$1//得到字符串需要动态执行,可以使用eval(),否则不执行,但eval()不能有php开始/关闭标签

转载地址:http://rjcix.baihongyu.com/

你可能感兴趣的文章
main方法中注入Spring bean
查看>>
解决service层无法注入
查看>>
了解lpk.dll是什么病毒以及lpk.dll病毒专杀方法
查看>>
接口隔离原则(设计模式4)
查看>>
StarUML使用说明-指导手册
查看>>
LeetCode--020--括号匹配(java版)
查看>>
LeetCode--083--删除排序链表中的重复元素
查看>>
LeetCode--206--反转链表
查看>>
ios推送通知相关开源项目
查看>>
软件工程第三次作业(2019)
查看>>
hibernate的组成部分
查看>>
4.1 Vivado使用技巧(2):使用Vivado DocNav
查看>>
适配器模式(Adapter pattern)
查看>>
Jmeter建立JDBC链接以及扩展
查看>>
php加入多维数组中,在PHP中添加到多维数组
查看>>
recurdyn matlab版本,基于Matlab与RecurDyn的电传动履带车辆的联合仿真
查看>>
mysql 存储过程无效,mysql导入存储过程无法使用
查看>>
matlab list函数参数,Matlab 函数参数汇总
查看>>
云im php,网易云IM
查看>>
测试linux vsftpd,vsftpd配置、测试
查看>>