摘要:目前为止,我们前面所用过的精确文本匹配也是一种正则表达式。在中,正则表达式一般由正则字符和一些特殊字符类似于通配符联合构成的一个文本模式的程序性描述。原子必须是正则表达式的最基本组成单元,而且在每个模式中最少要包含一个原子。
PHP 正则表达式 一、正则表达式简介
正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找和替换操作。目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。
在PHP中,正则表达式一般由正则字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。
在PHP中,正则表达式有三个作用:1.匹配,常用于从字符串中析取信息 2.用新文本代替匹配文本 3.将一个字符串拆分为一组更小的信息块
一个正则表达式中至少包含一个原子
二、两套正则表达式函数库PCRE库(推荐):使用preg_为前缀命名的函数;
POSIX库:使用ereg_为前缀命名的函数
三、PCRE库函数函数名 描述 ----------------------|-------------------------- preg_match() | 进行正则表达式匹配 preg_match_all() | 进行全局正则表达式匹配 preg_replace() | 执行正则表达式的搜索和替换 preg_split() | 用正则表达式分割字符串 preg_grep() | 返回与模式匹配的数组单元 preg_replace_callback | 用回调函数执行正则表达式的搜索和替换四、使用场景
表单验证
url_rewrite (url地址重写)
爬虫
五、正则表达式的组成部分1.定界符 (必须)
通常使用特殊字符组成,常用“/”。
2.原子(必须)
是正则表达式的最基本组成单元,而且在每个模式中最少要包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,具体分为5类。
普通字符作为原子:如a~z,A~Z,0~9。
一些特殊字符和转义后元字符作为原子: " * + ? .等。
一些非打印字符作为原子:如:f n r t v cx。
使用“通用字符类型”作为原子:如:d D w W s S。
自定义原子表([ ])作为原子:如:"/[apj]sp/"。
3.元字符
4.模式修正符
示例:
# 匹配一个字符a $pattern = "/a/"; # 匹配字符a,如果有返回1,没有返回0,只能匹配一次。 echo preg_match($pattern, "012344556"); # preg_match也可用于判断 if(preg_match($pattern, "1232423423", $matches)) { echo "匹配到了
"; # 并把匹配出来的字符以数组的形式赋值给$matches; # 打印结果:`array(1) {[0] => string(1) "a"}`; var_dump($matches); }else { echo "没有匹配"; }
元字符匹配:
# 如果只想匹配 `.`,特殊含义的字符要转义。 $pattern = "/./" # 匹配非打印字符 $pattern = "/ /" # 匹配0-9数字 $pattern = "/d/"; # 匹配除了0-9的数组 $pattern = "/D/"; # 匹配数字+大小写字母+下划线 $pattern = "/w/"; # 匹配除了数字、大小写字母、下划线 $pattern = "/W/"; # 匹配空白符(换行、缩进、空格) $pattern = "/s/"; # 匹配除了空白符的字符 $pattern = "/S/"; # `*` 代表匹配前面的原子出现0、1、或多次 $pattern = "so*u"; # `+` 代表匹配前面的原子出现1次、或多次 $pattern = "so+u"; # `?` 匹配前面的一个原子出现0次或者1次 $pattern = "hao?sou"; # 匹配除了换行符的任意字符 $pattern = "/./"; # `|`代表或者 $pattern = "/a|b|c/"; # 匹配前面的一个原子恰巧出现n次; $pattern = "/hao{2}sou/"; # 匹配出现>=2次 $pattern = "/hao{2, }sou/"; # 匹配出现2-5次 $pattern = "/hao{2, 5}sou/"; # `^` 必须以该原子开头 $pattern = "/^aaa/"; # `$` 必须以该原子结尾 $pattern = "/aaa$/"; # 严格模式 # 必须严格只能匹配aaa。 $pattern = "/^aaa$/"; # a | b | c $pattern = "/[abc]/"; # 除了a,b,c $pattern = "/[^abc]/"; # `()`可以看做一个整体,还可以做反向引用 # 比如要匹配协议头为http、https、ftp $pattern = "/(http|https|ftp):///"; # 匹配除了空白符的任意字符 $pattern = "/.*/"; # `.*`贪婪模式 $str = "abcabc"; $pattern = "/.*/"; # `.*?`取消贪婪模式 $pattern = "/.*?/"; 或: $pattern = "/.*/U";
模式修正符:
`i`代表ignore,忽略大小写 `m`匹配多行 `.`修正.的换行符 `x`忽略正则表达式里面的空白符 `D`取消$对 的忽略
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29427.html
摘要:兼容的正则表达式已经实现了很多使用不同解析引擎的正则函数。中主要有两个正则解析器一个称为,另一个称为兼容正则表达式。在中,每个正则表达式模式都是使用符合格式的字符串。 原文链接: Getting Started with PHP Regular Expressions Last-Modified: 2019年5月10日16:23:19译者注: 本文是面向0正则基础的phper, 很多...
摘要:正则表达式的都是匹配和替换搜索正则表达式要匹配的字符串匹配到的字符串匹配到的个数,没有匹配到返回下面是例子执行一个正则表达式匹配,非贪婪执行一个全局正则表达式匹配,贪婪执行结果匹配所有仅由有一个单词组成的科目名输出结果替换正则表达式要匹 正则表达式的都是匹配和替换 PHP 搜索 preg_match* /** * int preg_match* ( string $pattern ,...
摘要:正则表达式的都是匹配和替换搜索正则表达式要匹配的字符串匹配到的字符串匹配到的个数,没有匹配到返回下面是例子执行一个正则表达式匹配,非贪婪执行一个全局正则表达式匹配,贪婪执行结果匹配所有仅由有一个单词组成的科目名输出结果替换正则表达式要匹 正则表达式的都是匹配和替换 PHP 搜索 preg_match* /** * int preg_match* ( string $pattern ,...
摘要:在阅读这篇文章前最好把同系列文章实战正则表达式一验证手机号先仔细阅读一遍。但实际上这样一个表达式是无法从上面的中提取第一个元素的这里主要的问题是在默认情况下点号字符无法匹配换行符。但是很遗憾,正则表达式中没有排除型子表达式或者说排除型分组。 这篇文章通过提取html元素介绍了正则表达式中模式修饰符、贪婪匹配与非贪婪匹配、Unicode模式、环视等知识点。在阅读这篇文章前最好把同系列文章...
阅读 1826·2021-11-12 10:36
阅读 2258·2021-09-01 10:29
阅读 2296·2019-08-30 15:56
阅读 992·2019-08-30 12:56
阅读 2293·2019-08-26 13:58
阅读 2183·2019-08-23 18:38
阅读 1452·2019-08-23 18:32
阅读 2063·2019-08-23 16:53