php正则表达式

正则表达式

与Perl语言兼容的正则表达式处理函数

函数名功能描述
preg_match()进行正则表达式匹配
preg_match_all()进行全局正则表达式匹配
preg_replace()执行正则表达式的搜索和替换
preg_split()用正则表达式分割字符串
preg_grep()返回与模式匹配的数组单元
preg_replace_callback()用回调函数执行正则表达式的搜索和替换

正则表达式的语法规则

正则表达式匹配的模板,由原子(a~z),特殊功能的字符(*,+,?),模式修正符。

一个最简单的正则表达式模板中,至少包含一个原子"/a/",模式必须包含在两个反斜线"/"之间。

//在第二个字符串参数中,搜索与第一个参数给出的正则表达式匹配的内容
<?php
    $pattern='/<a.*?(?: |\\t|\\r|\\n)?href=[\'"]?(.+?)[\'"]?(?:|\\t|\\r|\\n)+.*?)?>(.+?)<Va.*?>/sim';
    $content="请单击进入<a href='http://www.baidu.com'>PHP</a>笔记";
    if(preg_match($pattern,$content)){
        echo"匹配成功";
    }else{
        echo "未成功"
    }

定界符

正则表达式在定界符中间,除了字母数字反斜杠之外任何字符都可以作为定界符

/<\/\w+>/   斜杠
|(\d{3})-\d+|Sm 竖线
!表达式!   感叹
{表达式}   花括号

原子

普通字符作为原子

包括大写和小写字母字符,所有数字

'/5/' 用于匹配是否有五个字符出现

'/php/' 用于匹配是否有PHP字符串出现

一些特殊字符和元字符作为原子

特殊字符作为原子需要使用转义字符"\"取消它的特殊意义

'/\./' 同于匹配字符串中是否有英文"."出现

'/<br\/\>/' 用于匹配字符串中是否有HTML的<br/>标记字符串出现

一些非打印字符作为原子

非打印字符为格式控制符号,例如空格,回车,制表符号等

原子字符含义描述
\cx匹配由x指明的控制字符。如\cM匹配一个Control-M或回车符,x为A~Z或a~z
\f匹配一个换页符等价于\x0c和\cL
\n匹配一个换行符等价于\x0a和\cJ
\r匹配一个回车符等价于\x0d和\cM
\t匹配一个制表符,等价于\x09和\cI
\v匹配一个垂直制表符,等价于\x0b和\cK

'/\r\n/' 匹配是否有回车换行符

使用通用字符类型作为原子

一个原子匹配一类字符

原子字符含义描述
\d匹配任意一个十进制数
\D匹配任意一个除十进制数字以外的字符
\s匹配任意一个空白字符
\S匹配除空白字符以外的任何一个字符等价于【^\f\n\r\t\v】
\w匹配任意一个数字,字母,下画线
\W匹配除数字,字母,下画线以外的任意一个字符
'/^\w+@\w+(\.\w+){0,3}$/' E-mail的正则表达式

自定义原子表[]作为原子

'/[apj]sp/' 匹配asp,psp,jsp三种

'/[^apj]sp/' 匹配除这三个的-sp类型字符

'/0[xX][0-9a-fA-F]+/' 匹配一个简单的十六进制数

元字符

构建正则表达式时的特殊字符

元字符含义描述
*匹配0,1,n次其前的原子
+匹配1次或多次其前的原子
匹配0或1次其前的原子
.匹配除了换行符外的任意一个字符
|匹配两个或多个分支选择
{n}表示其前面原子恰好出现n次
{n,}表示其前面原子出现不少于n次
{n,m}表示其前面原子至少出现n次最多出现m次
^或\A匹配输入字符串的开始位置(或在多行模式下的行的开头,即紧随一换行符后)
$或\Z匹配输入字符串的结束位置(或在多行模式下,行的结尾紧随一换行符之前)
\b匹配单词的边界
\B匹配除单词边界以外的部分
[]匹配方括号中指定的任意一个原子
[^]匹配除方括号中原子以外的任意一个字符
()匹配其整体的一个原子

向后引用

'/(Windows)(Linux)\\2OS/' 使用\2再次引用第二缓冲区中字符串“Linux”

'/(?:Windows)(Linux)\\1OS/' 使用"非捕获字符?=,?!,?:"忽略了第一个表达式的存储,所以"\1"引用的是“Linux”

优先级

优先级元字符描述
1\转义字符
2(),(?:),(?=),[]模式单元和原子表
3*,+,?,{n},{n,},{n,m}重复匹配
4^,$,\b,\B,\A,\Z边界限制
5|模式选择

模式修正符

​ 在正则表达式定界符之外使用

模式修正符功能描述
i在和模式进行匹配时不区分大小写
m将字符串视为多行
s设定此修正符,则"."匹配所有的字符,包括换行符,将字符串视为单行
x模式中空白忽略不计,除非被转义
e用在preg_replace()函数中,在替换字符串中对逆向引用做正常的替换,并将其作为PHP代码求值。并用其结果来替换所搜索的字符串
U本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上"?"才变得重复/a.*?e/。/a.*e/U
D模式中的美元元字符仅匹配目标字符串的结尾,如果最后一个字符是换行符,则美元符号也会匹配此字符之前的内容,如果设定了m修正符则忽略此选项

与Perl兼容的正则表达式函数

字符串的匹配和查找

函数preg_match()

pre_match(正则表达式,字符串,输出的字符串)

preg_match($pattern,$subject,$matches)返回0,1

其中$matchrs[0]保存全部匹配结果。

其余1,2,3,4,5,,保存第一个小括号的内容,第二个小括号的内容...等

函数preg_match_all()

与preg_match类似,不同的是函数preg_match第一次匹配后会停止搜索,而preg_match_all会一直搜索到指定字符串的结尾。

preg_match_all(表达式,字符串,匹配结果,预定义值)

预定义值为PREG_PATTERN_ORDER是默认值,$matches(0)为全部模式匹配数组,$matches[1]为第一个括号中子模式所匹配的字符串组成的数组。

PREG_SET_ORDER对结果排序使$matches[0]为第一组匹配项的数组,$matches[1]为第二组匹配项的数组

该函数把所有可能的匹配结果放入第三个数组中,并返回整个模式匹配的次数

函数preg_grep()

匹配数组中的元素,返回与正则表达式匹配的数组单元

array preg_grep(正则表达式,字符串)

字符串处理函数strstr(),strpos(),strrpos()和substr()

查找一个字符串是否包含某个子字符串使用strstr()(返回从匹配的第一次字符串出现的点后的其余部分,未搜索到则返回false)或strpos()函数(返回字符串在另一个字符串中第一次出现的位置,没找到则返回false,对大小写敏感,如果要对大小写不敏感则可以使用stripos())。strrpos()(返回最后一次出现的位置,大小写不敏感则用strripos()),从一个字符串取出一段字符串使用substr()函数

<?php
    function getfilename($url){
        $location=strrpos($url,"/")+1;//获取字符串最后一个"/"出现的位置,加一则代表文件开始位置
        $fileName=substr($url,$location);//获取从$location位置取到结尾的子字符串
        return $fileName;//获取返回的文件名
    }
    echo getFileName("http://baidu.com/index.php");//获取网页文件名index.php

字符串的替换

函数preg_replace()

执行正则表达式的搜索和替换

preg_replace(匹配项正则表达式,替换项,被匹配项,匹配次数)

<?php
    $pattern="/(\d{2})\/(\d{2})\/(\d{4})/";
    echo preg_replace($pattern,"\\3-\\1-\\2",$text);
    echo preg_replace($pattern,"\${3}-\${1}-\${2}",$text);//将“\\1”改为“\${1}”的形式替换第n个被捕获的括号内子模块所匹配的文本
模块修饰符“e”,设定了该字符,将把替换项的数值当成PHP代码求值
$pattern="/(<\/?)(\w+)([^>]*>)/e";
echo preg_replace($pattern,"'\\1'.strtoupper('\\2').'\\3'".$text);

函数str_replace()

str_replace(目标对象,替换对象,被处理字符串,变量名称(保存替换的次数))

不区分大小写则用str_ireplace()

字符串的分割和连接

函数preg_split()

按正则表达式的方法分割字符串,返回一个字符串数组

preg_split(分割的正则表达式,待分割的字符串,限制,标记)

限制意味着最多返回limit个字符串,为-1则没有限制。

标记为PREG_SPLIT_NO_EMPTY:只返回非空白部分。

PREG_SPLIT_DELIM_CAPTURE:定界符模式中的括号表达式也会被捕获并返回

PREG_SPLIT_OFFSET_CAPTURE:对每个出现的匹配结果返回其附属的字符串偏移量

函数explode()

用于字符串的分割

explode(分割字符串,被分割字符串,指定分割为多少个子串)

找不到分割则返回包含被分割字串的单个元素的数组

函数implode()

implode(连接字符或字符串,被连接的数组)

将数组中的每个元素用指定的字符连接起来

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值