# 正则表达式的语法规则
>[success]正则表达式由两部分构成:元字符和文本字符。
【元字符】是具有特殊含义的字符
【文本字符】就是普通的文本,如数字和字母
需要注意的是:PCRE风格的正则表达式一般都放置在定界符“/”之间,下面一一详细讲解。
## 定界符和修饰符
### 定界符
>[info] POSIX兼容正则表达式没有定界符,函数的相应参数会被认为是正则。
PERL兼容的正则表达式可以使用任不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符必须被用在表达式本身中,则需要用反斜线转义。在大多数使用
>[info]PCRE正则表达式的代码中,定界符都使用一个“/”,可在引号内表达的开始和结尾处看到,必须要记住,定界符并非表达式的一部分。也可以使用()、{}、[]和<>作为定界符。
### 修饰符
>[info]POSIX兼容正则表达式没有修饰符
>[info]PERL兼容正则表达式中可能使用的修饰符(修饰符中的空格和换行被忽略,其他字符会导致错误),在PCRE表达式的最后一个定界符之后,可以添加一个修饰符来更改正则表达式的行为。修饰符的种类如下。
(1)i(PCRE_CASELESS):忽略大小写
(2)(PCRE_MULTILINE):设定此修饰符,会将一个字符串视为多行,行起始(^)和行结束($)除了匹配整个字符串开头和结束外,还分别匹配其中的换行符(\n);若无此修饰符,则不包括换行符。
(3)s(PCRE_DOTALL):当设定此修饰,模式中的圆点(.)匹配所有的字符,包括换行符(\n);若无些修饰符,则不包括找行符。
(4)x(PCRE_EXTENDED):当设定此修饰符,将模式中的空白字符(除了被转义的完全删除忽略)。
(5)e:如果设定了此修饰符,preg_replace()函数将在替换字符串中逆向引用做正常 使用此修饰符,其他PCRE函数将忽略之。
(6)A(PCRE_ANCHORED):如果设定了此修饰符,模式将被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。
(7)D(PCRE_DOLLAR_ENDONLY):如果设定了此修饰符,模式中的行结束($)仅匹配目标字符串的结尾.没有此选 项时,如果最后一个字符是换行符的话,也会被匹配在里面。如果设定了m修饰符,则忽略此选项。
(8)S:当一个模式将被使用若干次时,为加速匹配得先对其进行分析。如果设定了此修饰符,则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的non-anchored模式有用。
(9)U(PCRE_UNGREEDY):使用“?”的默认匹配成贪婪状态的
(10)X(PCRE_EXTRA):模式中的任何反斜线后面跟上一个没有特殊意义的字母将会被导致错误,从而保留此组合以备将来扩充。默认情况下,一个反斜线后面跟一个没有特殊意义的字母被当作该字母本身。
(11)u(PCRE_UTF8)模式字符串被当成UTF-8。
## 逻辑区隔
>[success]关于逻辑区隔,POSIX兼容的正则表达式和PERL兼容的正则表达式的逻辑区隔符号的作用和使用方法完全一致。
>[info][]:包含任选一个操作的相关信息
{}:包含匹配次数的相关信息
():包含一个逻辑区间的相关信息,可被用来进行引用操作。
|:表示“或”,[ab]和a|b是等价的
## 元字符与“[]”相关
>[success]有两组不同的元字符:一种是模式中除了方括号内都被识别的,另一个是在方括号“[]”内被识别
>[info](1)POSIX兼容的正则表达式和PERL兼容的正则表达式“[]”之外相同的元字符如下。
\:有数钏用途的通用转义符
^:匹配字符串的开头
$:匹配字符串的结尾
?:区配0或者1
*: 匹配0个或1个前面指定类型的字符
+:匹配1个或者多个前面指定类型的字符
>[info](2)POSIX兼容的正则表达式和PERL兼容的正则表达式"[]"之外不相同的元字符如下:
PERL兼容的正则表达式匹配除了换行符外的任意一个字符;
POSIX兼容的正则表达式匹配任意一个字符。
>[info](3)POSIX兼容的正则表达式和PERL兼容正则表达式“[]”之内相同元字符如下:
\:有数种用途的通用转义符。
^:取反字符,但仅当其为第一个字符时有效。
-:指定字符ASCII范围,仔细研究ASCII码,你会发现[W-c]等价于[WXYZ\\^_\\abc]
>[info](4)POSIX兼容的正则表达式和PERL兼容的正则表达式“[]”之内不相同的元字符如下:
POSIX兼容的正则表达式中中[a-c-e]的指定会抛出错误
PERL兼容的正则表达中[a-c-e]的指定等价于[a-e]
## 匹配次数与“{}”相关
>[info] POSIX兼容的正则表达式和PERL兼容的正则表达式在匹配次数方面完全 一致!
{2}:表示匹配前面的字符两次
{2,}:表示匹配前面的字符两次或者多次,默认都是贪婪(尽可能多的匹配)
{2,4}:表示匹配前面的字符两次,三次或者4次
## 逻辑区间与“()”相关
>[info]使用()包含起来的区域是一个逻辑区间,逻辑区间的主要作用是体现一些字符出现的逻辑次序,另一个用处就晃可以用来引用(可以将此区间内的值引用给一个变量)。后一个作用比较奇特,请看下面的实例。
> ### 实例 与()相关的逻辑区间
>~~~
><?php
>$str="http://www.163.com";
>//POSIX兼容正则
>echo ereg_replace("(.+)", "<a href=\\1>\\1</a>",$str);
>echo "<br />";
>//PERL兼容正则:
>echo ereg_replace("/(.+)/", "<a href =$1>$1</a>",$str);
>//显示两个连接
>?>
>~~~
>[danger]在引用的时侯,括号是可以嵌套的,逻辑次序是按照“(”出现的次序来标定的。
## 类型匹配
>[info] PHP正则表达式中有一些内置的通用字符簇,用于指定字符的处理范围。下面首先介绍POSIX兼容的正则表达式的类型匹配
[:upper:]:匹配所有的大写字母,和[A-Z]意义相同
[:lower:]:匹配所有的大写字母,和[a-z]意义相同
[:alpha:]:匹配所有的大小写字母,和[A-Za-z]意义相同
[:alnum:]:匹配所有的字母和数字,和[A-Za-z0-9]意义相同
[:digit:]:匹配所有的数字,和[0-9]意义相同
[:xdigit:]:匹配所有的十六进制字符,和[0-9A-Fa-f]意义相同
[:punct:]:匹配所有的标点符号,和[.,"'?!;:]意义相同
[:blank:]:匹配空格和TAB,和[\t]意义相同。
[:space:]:匹配所有的空白字符,和[\t\n\r\f\v]意义相同
[:cntrl:]:匹配所有的ASCII0~31之间的控制字符,包括TAB、退格符和"\"反斜线。
[:graph:]:匹配所有的可打印字符,和[^\t\n\r\f\v]意义相同
[:print:]:匹配所有的可打印字符和空格,和[^\t\n\r\f\v]意义相同
[:<:]:匹配单词的开始
[:>:]:匹配单词的结尾
>[info]PERL兼容的正则表达式的类型匹配如下,这些是POSIX所不支持的。
\a:alarm,即BEL字符('0)
\cx:"control-x",其中x是任意字符
\e:escape('0B)
\f:换页符 formfeed('0C)
\n:换行符 newline('0A)
\r:回车符 carriage return('0D)
\t:制表符tab('0)
\xhh:十六进制代码为hh的字符
\ddd:八进制代码为ddd的字符,或backreference
\d:任意十制数字
\D:任意非十进制数的字符
\s:任意空白字符
\S:任意非空白字符
\w:任意”字“的字符
\W:任意”非字“的字符
\b:字分界线
\B:非字分界线
\A:目标的开头(独立于多行模式)
\Z:目标的结尾或位于结尾的换行符前(独立于多行模式)
\z:目标结尾(独立于多行模式)
\G:目标中的第一个区配位置
- 前言
- PHP获取服务器信息
- PHP中的常用函数-新手必备知识
- 日期时间相关的函数
- 时区设置
- time函数
- strtotime 时间戳
- date函数
- mktime函数
- 联合使用 date() 和 mktime()
- PHP数据类型相关的函数
- PHP数组相关的函数
- array函数
- 数组的排序
- sort()和rsort()函数
- asort()和arsort()函数
- ksort()和krsort()函数
- array_multisort()函数
- array_reverse函数
- 数组的遍历
- 数组中新增和删除元素
- 数组头部插入和删除元素
- 数组尾部插入和删除元素
- 删除数组中重复的元素
- 删除数组中指定的元素
- 数组的合并
- 随机/打乱已知数组
- range函数
- 数组去除重复
- PHP常用功能函数
- URL地址处理函数
- post/get请求
- PHP字符串相关的函数
- PHP文件系统
- PHP正则表达式
- 正则表达式语法规则
- POSIX扩展的正则表达式函数
- 查找字串函数
- 替换字符串函数
- Perl兼容的正则表达式函数
- PHP中类的应用
- 中文编码
- 关于stdClass
- 变量相关函数
- unset
- PHP数值相关的函数
- 数值取整
- 开发工具与开发环境使用技巧
- sublime
- 常用插件
- Atom
- 常用插件
- 常见问题
- Visual Studio Code
- vscode常用插件
- 编程推荐字体
- MAC下开发常识
- MAC下的常用设置
- MAC下的常用开发工具
- MAC下XAMMP的常见问题
- Apache配置基础
- PhpStrom
- php中的常见问题
- 文件上传相关问题
- API接口中常见问题
- 关于缓冲区问题
- PHP中注意事项
- 条件判断
- PHP文件管理模块
- 文件管理源码
- 文件管理的常用函数
- 文件管理中文乱码处理
- 自定义功能函数
- 文件下载
- PHP常用头信息定义汇总
- 常见PHP网页木马
- 加密算法
- 1. Base58可逆加密
- 2. AES加密/解密
- mysql数据库操作
- 命令行操作Mysql常用令行-查询
- 命令行操作Mysql常用令行-操作
- Mysql使用中的技巧
- 在线数据库管理中常用命令
- sql show命令
- mysql数据库的备份与恢复
- 二进制日志介绍
- 二进制日志常用命令
- ThinkPHP
- 数据迁移
- 常见问题
- 验证码问题
- API接口中的异常处理
- API接口安全
- 解决跨域问题
- 自定义实用功能函数