当前位置: 首页> 技术教程> 正文

正则表达式菜鸟教程,php标准教程

宁旺春土特产品

对于刚接触后端开发的新手来说,PHP作为入门级的服务端脚本语言,常常因为语法灵活、上手快被很多开发者选为第一门后端语言,而正则表达式作为字符串处理的核心工具,几乎贯穿了PHP开发中表单验证、文本提取、数据清洗等所有核心场景,很多初学者刚接触时总觉得正则符号晦涩难懂,又不知道在PHP中如何正确调用相关函数,往往走了不少弯路。

正则表达式菜鸟教程,php标准教程

想要系统掌握这两部分内容,首先要理清正则表达式的基础语法逻辑,再对应到PHP的标准函数体系中去练习,才能真正做到学以致用。从正则表达式的基础构成来看,最核心的元素无非是普通字符、元字符、量词、分组与断言这几大类,普通字符就是我们日常使用的字母、数字、汉字等,它们会按照字面意思进行匹配,而元字符则是正则的“灵魂”,比如用来匹配任意单个字符的`.`,匹配数字的`\d`,匹配空白字符的`\s`,匹配单词边界的`\b`,还有表示字符集的`[]`、表示或逻辑的`|`,这些符号看似零散,其实每一个都有明确的使用场景,比如做手机号验证时,我们需要用`^1[3-9]\d{9}$`这样的规则,其中`^`和`$`分别表示字符串的开始和结束,`1`是固定的开头字符,`[3-9]`限定了第二位数字的范围,`\d{9}`则表示后面要跟着9个数字,这样的规则就能精准匹配符合国内标准的11位手机号。

很多初学者容易混淆量词的使用,比如`*`表示匹配0次或多次,`+`表示匹配1次或多次,`?`表示匹配0次或1次,`{n}`表示精确匹配n次,`{n,}`表示至少匹配n次,`{n,m}`表示匹配n到m次,这些量词默认都是贪婪模式,也就是会尽可能多地匹配符合规则的内容,比如用`/<.*>/`去匹配`

hello
`时,会直接匹配整个字符串,而如果在量词后面加上`?`变成非贪婪模式,也就是`<.*?>`,就只会匹配第一个`
`标签,这一点在HTML文本提取中非常重要,也是很多新手容易踩坑的地方。除此之外,分组与捕获也是正则的核心功能,用`()`包裹的部分会被当作一个整体,同时还能捕获匹配到的内容,方便后续提取,比如提取邮箱的用户名和域名时,就可以用`/^(\w+)@([\w.]+)$/`这样的规则,第一个括号捕获用户名,第二个括号捕获域名,在PHP中可以通过preg_match函数的第三个参数拿到所有捕获的内容。

在PHP的标准教程体系中,处理正则表达式的函数主要分为匹配、替换、分割、过滤这几大类,其中最常用的就是preg_match、preg_match_all、preg_replace、preg_split这几个函数。preg_match函数用于执行一次匹配,返回匹配的次数,也就是0次或1次,适合用来做表单验证,比如验证用户输入的邮箱是否符合格式,只需要把正则规则、待验证的字符串传给preg_match,如果返回1就说明格式正确,返回0则说明格式错误。而preg_match_all则会执行全局匹配,返回匹配到的总次数,适合用来从一段文本中提取所有符合规则的内容,比如从一篇文章中提取所有的URL、所有的图片标签,都可以用这个函数,它的第三个参数会返回一个二维数组,第一个元素是所有匹配到的完整内容,后面的元素依次是各个分组捕获的内容。

preg_replace函数则用于执行正则替换,它比普通的str_replace功能强大得多,可以支持模式匹配的替换,还支持反向引用,比如我们要把文本中所有的`

`标签替换成`

`,同时保留标签内的内容,就可以用`preg_replace('/

(.*?)<\/h2>/', '

$1

', $text)`这样的写法,其中`$1`就是对第一个分组捕获内容的反向引用,这在文本内容批量格式化的时候非常实用。而preg_split函数则是用正则规则来分割字符串,比普通的explode函数更灵活,比如要把一段用多个空格、逗号、顿号分隔的字符串拆分成数组,只需要用`preg_split('/[\s,、]+/', $str)`就可以一次性处理多种分隔符,不需要多次调用字符串函数。

对于新手来说,学习正则和PHP正则函数最好的方法就是结合实际场景反复练习,比如先从简单的手机号、邮箱、身份证号验证开始练手,再慢慢尝试提取网页中的特定内容、处理用户输入的富文本过滤敏感词、批量格式化日志文件等。同时还要注意PHP中正则的一些特性,比如正则表达式需要用分隔符包裹,最常用的是`/`,如果正则内容里有`/`的话可以换成`#`、`~`等其他分隔符,避免频繁转义;还要注意中文匹配的问题,在UTF-8编码下,匹配中文需要用`\x{4e00}-\x{9fa5}`,同时要加上`u`修饰符,否则会出现乱码或者匹配不准确的情况;另外还有模式修饰符的使用,比如`i`表示不区分大小写,`m`表示多行模式,`s`表示让`.`可以匹配换行符,这些修饰符能让正则的适配性更强。

很多人觉得正则表达式难记,其实根本不需要死记硬背所有符号,只需要记住核心的元字符和量词,再掌握PHP中几个核心函数的用法,遇到复杂场景的时候再去查手册调试即可,毕竟正则的核心是逻辑思维,不是符号记忆。随着开发经验的积累,你会发现正则表达式是处理字符串问题

PC右下角
wap底部