PHP笔记13:正则表达式

1. 正则表达式

正则表达式是对字符串进行操作的一种逻辑公式,就是用一些特定的字符组合成一个规则字符串,称之为正则匹配模式。

使用PCRE库函数进行正则匹配

2.  正则表达式的基本语法

  • 由分隔符和元字符组成
3. 分隔符
  • 分隔符可以是非数字、非反斜线、非空格的任意字符,经常使用的分隔符是正斜线(/),hash符号(#)、取反符号(~)
/foo bar/
#^[^0-9]$#
~php~
  • 如果模式中包含分隔符,则分隔符需要用反斜杠(\)转义
/http:\/\//
  • 如果模式中包含较多的分割字符,建议更换其他字符作为分隔符,也可以采用preg_quote进行转义
$p='/http://';
$p='/'.preg_quote($p,'/').'/';
echo $p;    //输出/\/http\:\/\//
  • 分隔符后面可以使用模式修饰符,模式修饰符包括:i、m、s、x等,如i可以忽略大小写匹配,m多文本模式,s单行文本模式,x忽略空白字符
$str="Http://www.imooc.com/";
if(preg_match('/http/i', $str))
{
    echo '匹配成功';
}
4. 元字符与转义
  • 正则表达式中具有特殊含义的字符称之为元字符
  • 常用的元字符:
  1.  \ 一般用于转义
  2.  行定位符: ^ 断言目标的开始位置(多行模式下是行首),$断言目标的结束位置(多行模式下是行尾)。如“de$”表示以de结尾的字符串
  3. 单词定界符\b。如\ban\b表示匹配单词an,不匹配an作为单词的一部分。\B与此相反
  4. 点号操作符(.)匹配除换行符外的任何字符
  5. 字符类定义,放在[ ]中
  6. 选择字符(|)表示或,如Aa|Bb表示匹配Aa或者Bb。|与[ ]的区别:|可以匹配任意长度的字符,[ ]如果要匹配多个字符要配合连接字符(-)一起使用,如[a-b]表示匹配a或者b
  7. 括号字符(),限定子组,改变限定符如 |、*、^的限定范围。如(my|your)baby匹配的是mybaby或者yourbaby
  8. 限定符用于限定每个字符串出现的次数。如D+表示一个或多个D                                                                                                                                                                                                              
  9. 方括号[]内使用的元字符:\ 转义字符;^表示排除不符合的字符;- 标记字符范围。如[^1-5]表示该字符不是1-5之间的数字
  10. 指定预定义的字符集                                                                                                                                                                                                                                                                      
5. 贪婪模式与懒惰模式
  • 正则表达式中的每个元字符匹配一个字符,当使用+后就会变得贪婪,将匹配尽可能多的字符
  • 当使用?时将匹配尽可能少的字符
  • 如果确切的知道所匹配的字符长度,可以使用{}指定匹配字符数
$p1='/\d+\-\d+/';
$p2='/\d?\-\d?/';
$p3='/\d{2}\-\d{4}/';
$str="我的电话是010-123456789";
preg_match($p1, $str,$match);
echo $match[0];//010-123456789
preg_match($p2, $str,$match1);
echo $match1[0];//0-1
preg_match($p3, $str,$match2);
echo $match2[0];//01-1234
6. 使用正则表达式进行匹配
目的判断子字符串是否存在,字符串替换、分割字符串、获取模式子串等。
PHP使用PCRE库函数进行正则匹配,通过设定好模式,然后调用相关的处理函数来取得匹配结果。
  • preg_match($pattern,$subject,$match)返回值是匹配成功的次数0或者1(匹配成功一次后立即停止搜索),$match[0]包含完整模式匹配到的文本,$match[1]包含第一个匹配子组匹配到的文本,以此类推。
  • preg_match_all获取所有匹配结果
7. 正则表达式的搜索和替换
  • preg_replace($pattern,$replacement,$string)
$string='April 15, 2014';
$pattern='/(\w+) (\d+), (\d+)/i';
$replacement='$3,${1} $2';
echo preg_replace($pattern, $replacement, $string);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值