栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

php的正则表达式

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

php的正则表达式

php的正则

我们在这里讨论正则,几乎所有编程语言都有的模块。可能语法有点不一样,求解过程不一样,但是大致的规则是类似的。
我们将要讨论三部分

正则的规则基于pcre[正则的基础]常用的正则[正则的应用]php中的正则的使用[正则在php中的使用]
正则的语法

官方语法规则

正则表达式的定义

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

正则表达式的组成

普通字符串
元字符
字符转义
重复
分支
反义
分组
反向引用
捕获和断言规则
贪婪和懒惰
处理选项

下一个本地的测试器,我是mac 我用的 传送门

元字符
使用元字符需要转移

. 任意字符
w 字母数字或者下划线
s 任意空白符
d 数字
b 单词的开始或者结束
^  匹配字符串的开始
$  匹配字符串的结束
重复匹配
* 重复0此或更多次
+ 一次以上
? 0次或者一次
{n} n词
{n,} 
{n,m} n到m词
分支条件
用| 分开,相当于或
分支条件的执行:原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了
分组
用() 包含起来。然后你就可以指定这个子表达式的重复次数了
例如 (d+){10}
反义
一般是元字符大写

W  匹配任意不是字母,数字,下划线,汉字的字符
S  匹配任意不是空白符的字符
D  匹配任意非数字的字符
B  匹配不是单词开头或结束的位置[^x]    匹配除了x以外的任意字符[^aeiou]    匹配除了aeiou这几个字母以外的任意字符
反向引用
主要用于重复搜索
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
捕获和断言规则
捕获  (exp)   匹配exp,并捕获文本到自动命名的组里
(?exp)    匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言    (?=exp) 匹配exp前面的位置
    在字符串singing a song 中 使用正则 w+(?=ingb) 匹配sing
(?<=exp)    匹配exp后面的位置
    在字符串singing a song 中 使用正则 w+(?<=bsing) 匹配ing
(?!exp) 匹配后面跟的不是exp的位置
    d{3}(?!d)匹配三位数字,但是后面不能是数字
(?贪婪与懒惰
默认是贪婪的

懒惰的语法的实现

*?  重复任意次,但尽可能少重复
+?  重复1次或更多次,但尽可能少重复
??  重复0次或1次,但尽可能少重复
{n,m}?  重复n到m次,但尽可能少重复
{n,}?   重复n次以上,但尽可能少重复
处理选项

常用的模式

IgnoreCase(忽略大小写)   匹配时不区分大小写。
Multiline(多行模式) 更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配n之前的位置以及字符串结束前的位置.)
Singleline(单行模式)    更改.的含义,使它与每一个字符匹配(包括换行符n)。
IgnorePatternWhitespace(忽略空白)   忽略表达式中的非转义空白并启用由#标记的注释。ExplicitCapture(显式捕获)   仅捕获已被显式命名的组。

php正则表达式的模式

i 忽略大小写模式 #[a-z]#im 多行模式 #^t.*#mis 点号通配模式 点号可以匹配换行符
U 表示懒惰模式
u 支持UTF-8模式
D 支持结尾模式
编写正则表达式
 与直接写  或| 非 ^
 使用元字符,分组规则,量词,组合在一起便构成了基本的正则表达式。
符号优先级
() (?:) (?=) []
* + {n} {n,m}
^ $|
正则表达式的优化
这些优化是前人的经验
    使用{a-z}代替[a|b|c|d],类似的风格
    最左匹配
    标准量词是匹配优化
    谨慎使用.*这样的表达式
    尽量使用字符串函数替换处理
    合理使用括号表达式,可以考虑使用方向引用
    优化起始点,行描点优化
    对大而全的表达式进行拆分
    注意量词转换的效率差异
    可以使用其他的解决方案代替正则
        1 字符串处理函数   
        2 filter系列如果是过滤的话
        3 xpath的方案
常用的正则表达式

匹配数字 (d+)

匹配汉字  ^[u4e00-u9fa5]{0,}$

中文、英文、数字但不包括下划线等符号:^[u4E00-u9FA5A-Za-z0-9]+$ 或 ^[u4E00-u9FA5A-Za-z0-9]{2,20}$

邮箱匹配

^w+([_.]w+)*@w+([-.]w+)*.w+([-.]w+)*$

身份证号

^d{15}|d{18}$

账号的合法性

^[a-zA-Z][a-zA-Z0-9_]{4,15}$

日期格式
^d{4}-d{1,2}-d{1,2}$
一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
一个月的31天(01~09和1~31):^(0?[1-9]|((1|2)[0-9])|30|31)$

html正则标记
<(S?)[^>]>.?|<.? />

<(S*?)[^>]*>.*?|<.*? />
php常用的正则函数

php函数介绍
preg_*系列
目前主要用到的preg_match preg_replace preg_math_all



作者:轻舞凋零
链接:https://www.jianshu.com/p/e1a357ac12e1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/227805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号