资讯专栏INFORMATION COLUMN

PHP 正则表达式

rozbo / 2071人阅读

摘要:规范为的缩写,中文即兼容正则表达式,由开发的库,为很多现代工具所使用,大多数编程语言的正则表达式也都是集成该规范。接下来本文会对规范的正则表达式作出详细介绍。正则语法分隔符当使用函数的时候,模式需要由分隔符闭合包裹。

概述

正则表达式(Regular Expression)是一种字符匹配工具,通过构建具有特定规则的模式,和输入字符串数据进行比较,然后进行匹配、分割、替换等等的相关操作。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了。

目前有两种不同规范的正则表达式:

POSIX 规范:在兼容 POSIX 的 UNIX 系统上,grep 和 egrep 之类的工具都遵循 POSIX 规范,一些数据库系统中的正则表达式也匹配 POSIX 规范。

PCRE 规范:为 Perl Compatible Regular Expressions 的缩写,中文即 Perl 兼容正则表达式,由 Philip Hazel 开发的 Perl 库,为很多现代工具所使用,大多数编程语言的正则表达式也都是集成该规范。

针对两种不同的正则表达式规范,PHP 提供了两组不同的函数库,分别为 POSIX Regex 扩展库 和 PCRE 扩展库,每一个函数库对应于一种特定的正则表达式。

需要注意的是,从 PHP5.3.0 开始,POSIX Regex 扩展将被废弃,所有调用本扩展中函数都将提示 E_DEPRECATED 错误。

接下来本文会对 PCRE 规范的正则表达式作出详细介绍。

PCRE 正则语法 1. 分隔符

当使用 PCRE 函数的时候,模式需要由分隔符闭合包裹。分隔符可以使任意非字母数字、非反斜线、非空白字符。一般是使用斜线 / 作为定界符。

如果分隔符需要在模式内进行匹配,它必须使用反斜线进行转义。如果分隔符经常在 模式内出现, 一个更好的选择就是是用其他分隔符来提高可读性。
2. 原子

原子是正则表达式的最基本的组成单位,而且必须至少包含一个原子。常见的有:

.   匹配除换行符之外任意字符
d  匹配任意一个十进制数字
D  匹配任意一个非十进制字符
s  匹配一个不可见原子
S  匹配一个可见原子
w  匹配任意一个数字、字母或下划线,同 `[a-zA-Z0-9_]`
W  匹配任意非一个数字、字母或下划线,同`[^a-zA-Z0-9_]`
[]  作为一个原子,匹配 [] 之间的一个原子
[^] 作为一个原子,不能匹配 [] 之间的一个原子
PCRE 中有关原子和元字符的完整列表,请见 正则表达式。
3. 元字符

元字符用来修饰原子的字符,不可以多带带出现。

//量词
{n} 匹配原子恰好出现n次
{n,} 匹配原子出现不少于n次
{n,m} 匹配原子出现至少n次,最多m次
* 表示其前面的原子出现0至多次,相当于{0,}
+ 表示前面的原子至少出现1次,相当于{1,}
? 表示前面的原子出 0次或1次,相当于{0,1}

//边界限制
^ 指定匹配的字符串以什么原子开头
$ 指定匹配的字符串以什么原子结尾

//模式选择符
| 多选一

//模式单元
() 多原子作为一个大原子
4. 模式修正符

位于整个模式的最后面,在整个正则表达式中优先调用,是对正则表达式功能的扩展。可以一次使用一个,每一个都具有一定的意义,也可以连续使用多个符号。

i //不区分大小写
s //正则表达式中.匹配所有字符,包括换行符
U //匹配模式变为懒惰模式
x //空白忽略
PCRE 函数
函数名 说明
preg_filter 执行一个正则表达式搜索和替换
preg_grep 返回匹配模式的数组条目
preg_last_error 返回最后一个PCRE正则执行产生的错误代码
preg_match_all 执行一个全局正则表达式匹配
preg_match 执行匹配正则表达式
preg_quote 转义正则表达式字符
preg_replace_callback_array 执行正则表达式搜索并使用回调进行替换
preg_replace_callback 执行一个正则表达式搜索并且使用一个回调进行替换
preg_replace 执行一个正则表达式的搜索和替换
preg_split 通过一个正则表达式分隔字符串
// 匹配
$qq = "10001110@qq.com";
$pattern = "/^[1-9][0-9]{4,}$/";
if (preg_match($pattern, $email, $match)) {
 echo "匹配成功
"; } else { echo "匹配失败
"; } // 切割 $keywords = preg_split("/[s,]+/", "hypertext language, programming"); print_r($keywords); # Array ( [0] => hypertext [1] => language [2] => programming ) // 替换 $str = "foo o"; echo preg_replace("/ss+/", " ", $str); # "foo o" $count = 0; echo preg_replace(array("/d/", "/s/"), "*", "xp 4 to", -1 , $count); # xp***to echo $count; # 3
常用正则表达式

非空字符

$pattern = "/S+/";

手机号匹配

$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}$";

E-mail 匹配

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

URL 匹配

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

IP 地址匹配

$pattern = "/((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))/";

身份证号匹配

$pattern = "/(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/";

中国邮政编码匹配

$pattern = "/^[1-9]d{5}(?!d)$/";

HTML 标签匹配

$pattern = "/^<([a-z]+)([^<]+)(?:>(.)|s+/>)$/";

中文匹配

$pattern = "/^[x{4e00}-x{9fa5}]+$/u";
注:PHP 中使用 x 表示十六进制数据。

日期匹配

$pattern1 = "/^d{4}-d{1,2}-d{1,2}$/"; # 2018-04-27
$pattern2 = "/^(0?[1-9]|1[0-2])$/"; # 月份(01~09和1~12)
$pattern3 = "/^((0?[1-9])|((1|2)[0-9])|30|31)$/"; # 日期(01~09和1~31)

以上内容整理自网络,参考文章:

正则表达式

PCRE

PHP正则表达式

PHP高级特性一之正则表达式用法

常用正则表达式

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

转载请注明本文地址:https://www.ucloud.cn/yun/28689.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/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
  • PHP正则达式

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

    isaced 评论0 收藏0

发表评论

0条评论

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