PHP 正则表达式

什么叫正则表达式

正则表达式是对字符串进行操作的一种逻辑公式

用一些特定的字符组合成一个规则字符串,称之为正则匹配模式

PHP中使用PCRE库函数进行正则匹配,PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。

PHP 正则表达式:http://www.imooc.com/learn/350

javascript 正则表达式:http://www.imooc.com/learn/706

Python 正则表达式:http://www.imooc.com/learn/550

preg,代表“Perl的正则表达式(Perl Regular Expressions)”。

PHP中,ereg 已经逐渐被 preg 替代了

PCRE 库函数作用
preg_match执行匹配正则表达式,常用来判断一类字符模式是否存在。preg_match( reg, str[, match]);matches matches[0] 将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。
preg_match_all执行一个全局正则表达式匹配,可以循环获取一个列表的匹配结果数组
preg_filter执行一个正则表达式搜索和替换
preg_grep返回匹配模式的数组条目
preg_last_error返回最后一个PCRE正则执行产生的错误代码
preg_quote转义正则表达式字符
preg_replace_callback_arrayPerform a regular expression search and replace using callbacks
preg_replace_callback执行一个正则表达式搜索并且使用一个回调进行替换
preg_replace执行一个正则表达式的搜索和替换,preg_replace( pattern, replacement, $string);
preg_split通过一个正则表达式分隔字符串

基本语法

PCRE库函数中,正则匹配模式使用分隔符元字符组成

分隔符可以是非数字、非反斜线、非空格的任意字符。经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~) (这里比JS正则规则宽松?)

/^[0-9]$/
#^[0-9]$#
~^[0-9]$~

如果模式中包含分隔符,则需要用 \ 进行转义,也可以采用preg_quote进行转义。如果模式中包含较多的分割字符,建议更换其他的字符作为分隔符。

$reg = /http:\/\//

$reg = 'http://';
$reg = '/' . preg_quote($p, '/') . '/';

分隔符后面可以使用模式修饰符,正则表达式中常用的模式修饰符有i、g、m、s、x、e等。它们之间可以组合搭配使用。

模式修饰符

模式修饰符作用
i不区分大小写
g全局匹配
m将字符串视为多行,不管是那行都能匹配
s将字符串视为单行,换行符作为普通字符
x将模式中的空白忽略
A强制从目标字符串开头匹配
D如果使用$限制结尾字符,则不允许结尾有换行
U只匹配最近的一个字符串,不重复匹配
e配合函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行

元字符

元字符作用
\一般用于转义字符
^方括号外面,表示断言目标的开始位置,但在方括号内部则代表字符类取反
$断言目标的结束位置(或在多行模式下是行尾)
.匹配除换行符外的任何字符(默认)
[开始字符类定义
]结束字符类定义
|或,开始一个可选分支
(子组的开始标记
)子组的结束标记
?量词,0 次或 1 次匹配
*量词,0 次或多次匹配
+量词,1 次或多次匹配
{自定义量词开始标记
}自定义量词结束标记,当我们确切的知道所匹配的字符长度的时候,可以使用{}指定匹配字符数。/\d{3}-\d{8}/
\w查找单词字符。字符 ( 字母 ,数字,下划线_ )
\W查找非单词字符。
\d查找数字。
\D查找非数字字符。
\s查找空白字符。空格
\S查找非空白字符。
\b匹配单词边界。
\B匹配非单词边界。
\0查找 NUL 字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。

贪婪模式与懒惰模式

正则表达式中每个元字符匹配一个字符

当使用 + 之后,它将匹配尽可能多的字符,既是贪婪模式。

但使用问号 ? 字符时,它将尽可能少的匹配字符,既是懒惰模式。

贪婪模式:在可匹配与可不匹配的时候,优先匹配

懒惰模式:在可匹配与可不匹配的时候,优先不匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值