资讯专栏INFORMATION COLUMN

PHP正则表达式

isaced / 631人阅读

摘要:正则表达式是什么是一种字符串处理的工具搜索匹配搜索替换搜索分割功能强大是一种规则正则表达式应用范围数据验证数据处理过滤数据查询各语言都支持正则表达式相关函数正则表达式一个匹配返回匹配结果的次数执行一个全局正则表达式匹配返回匹配结果的次数

正则表达式是什么

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

功能强大,是一种规则

正则表达式应用范围

数据验证

数据处理/过滤

数据查询

各语言(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匹配的元素组成的数组.

正则表达式组成

定界符

</>复制代码

  1. 一般使用"/",但不限于此
  2. 除字母、数字、反斜杠""的其他字符都可以作为定界符

原子

</>复制代码

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

元字符

</>复制代码

  1. //量词
  2. {n} 匹配原子恰好出现n次
  3. {n,} 匹配原子出现不少于n次
  4. {n,m} 匹配原子出现至少n次,最多m次
  5. * 相当于{0,}
  6. + 相当于{1,}
  7. ? 相当于{0,1}
  8. //边界限制
  9. ^ 指定匹配的字符串以什么原子开头
  10. $ 指定匹配的字符串以什么原子结尾
  11. //模式选择符
  12. | 多选一
  13. //模式单元
  14. () 多原子作为一个大原子

模式修正符

</>复制代码

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

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

正则表达式例子

非空判断

</>复制代码

  1. $pattern = "/S+/";
  2. $ret = preg_match($pattern," ");//false为空

去除空格

</>复制代码

  1. $str = "你是谁 2 年后";
  2. $pattern = "/s+/";
  3. $ret = preg_replace($pattern,"",$str);

手机号匹配

</>复制代码

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

email匹配

</>复制代码

  1. $pattern = "/^(w)+(.w+)*@(w)+(.w+)+$/";

URL验证(http/https)

</>复制代码

  1. $pattern = "/^https?:////(w+.)+[a-z]+$/";
正则表达式使用场景——模板引擎

实现原理

</>复制代码

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

简单实现步骤

</>复制代码

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

正则进行模式替换

</>复制代码

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22601.html

相关文章

  • PHP 正则达式入门 Getting Started with PHP Regular Expre

    摘要:兼容的正则表达式已经实现了很多使用不同解析引擎的正则函数。中主要有两个正则解析器一个称为,另一个称为兼容正则表达式。在中,每个正则表达式模式都是使用符合格式的字符串。 原文链接: Getting Started with PHP Regular Expressions Last-Modified: 2019年5月10日16:23:19译者注: 本文是面向0正则基础的phper, 很多...

    zhangke3016 评论0 收藏0
  • PHP 正则达式

    摘要:规范为的缩写,中文即兼容正则表达式,由开发的库,为很多现代工具所使用,大多数编程语言的正则表达式也都是集成该规范。接下来本文会对规范的正则表达式作出详细介绍。正则语法分隔符当使用函数的时候,模式需要由分隔符闭合包裹。 概述 正则表达式(Regular Expression)是一种字符匹配工具,通过构建具有特定规则的模式,和输入字符串数据进行比较,然后进行匹配、分割、替换等等的相关操作。...

    rozbo 评论0 收藏0
  • PHP/JS 常用的正则达式

    摘要:正则表达式的都是匹配和替换搜索正则表达式要匹配的字符串匹配到的字符串匹配到的个数,没有匹配到返回下面是例子执行一个正则表达式匹配,非贪婪执行一个全局正则表达式匹配,贪婪执行结果匹配所有仅由有一个单词组成的科目名输出结果替换正则表达式要匹 正则表达式的都是匹配和替换 PHP 搜索 preg_match* /** * int preg_match* ( string $pattern ,...

    mikyou 评论0 收藏0
  • PHP/JS 常用的正则达式

    摘要:正则表达式的都是匹配和替换搜索正则表达式要匹配的字符串匹配到的字符串匹配到的个数,没有匹配到返回下面是例子执行一个正则表达式匹配,非贪婪执行一个全局正则表达式匹配,贪婪执行结果匹配所有仅由有一个单词组成的科目名输出结果替换正则表达式要匹 正则表达式的都是匹配和替换 PHP 搜索 preg_match* /** * int preg_match* ( string $pattern ,...

    Simon 评论0 收藏0
  • php实战正则达式(二):提取html元素

    摘要:在阅读这篇文章前最好把同系列文章实战正则表达式一验证手机号先仔细阅读一遍。但实际上这样一个表达式是无法从上面的中提取第一个元素的这里主要的问题是在默认情况下点号字符无法匹配换行符。但是很遗憾,正则表达式中没有排除型子表达式或者说排除型分组。 这篇文章通过提取html元素介绍了正则表达式中模式修饰符、贪婪匹配与非贪婪匹配、Unicode模式、环视等知识点。在阅读这篇文章前最好把同系列文章...

    ityouknow 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<