正则表达式

一、常用函数

preg_match

preg_match_all

preg_replace

preg_replace_callback

二、 PCRE模式

1.分隔符 分隔符可以使任意非字母数字、非反斜线、非空白字符。推荐: //

2.元字符

共有两种不同的元字符:一种是可以在模式中方括号外任何地方使用的,另外一种 是需要在方括号内使用的。

\ ^ $ .[] |()?*+{}

[\^-]

3.转义字符

\n 换行

\r 回车

\t 水平制表符

\d 任意十进制数字

\D 任意非十进制数字

\s 任意空白字符

\S 任意非空白字符

\w 任意单词字符

\W 任意非单词字符

锚 ^开始 $结束

4.模式修饰符

i 不区分大小写

S 当一个模式需要多次使用的时候,为了得到匹配速度的提升,值得花费一些时间 对其进行一些额外的分析。如果设置了这个修饰符,这个额外的分析就会执行。

U 非贪婪模式

u 模式和目标字符串都被认为是 utf-8 的

<?php
$str="asdasd_";
if(preg_match("/[^\w]+/",$str,$num)){
  echo "存在<br/>";
}else{
  echo "不存在<br/>";
}
 
 
$str="中国是世界古老的国度,存在5000年历史文明。中国目前与14亿人口,也是最大的人口国度";

//匹配数字
preg_match("/[\d]+/",$str,$num);
print_r($num);
//子模式匹配
preg_match("/([\d]+)/",$str,$num);
print_r($num);
//匹配所有
preg_match_all("/[\d]+/",$str,$num);
print_r($num);
//preg_replace — 执行一个正则表达式的搜索和替换
echo $str=preg_replace("/[\d]+/","$0 匹配",$str);
echo "<br />";
//preg_replace_callback使用回调替换
echo preg_replace_callback("/[\d]+/",function($matches){
  return $matches[0]*2;
},$str);


//匹配邮箱 
$str="362606856@qq.com";
if(preg_match("/\w+@\w+\.(\w)+/",$str)){
  echo $str."是邮箱";
}
//匹配中文
$str="as中ddd";
if(preg_match("/[\x{4e00}-\x{9fa5}]+/u",$str)){
  echo $str."含中文<br/>";
}
//过滤非法字符串
$preg="美女|写真|女优|混蛋";
$str="这家伙真实混蛋";
if(preg_match("/$preg/",$str)){
  echo $str."含非法字符<br/>";
}


//解析html 匹配出链接和标题
$html='<div class="list">
  <div class="item">
    <a class="link" href="http://www.deituicms.com">这是标题</a>
    <div class="price">¥123</div>
  </div>
  <div class="item">
    <a  class="link2" href="http://www.deituicms.com">这是标题</a>
  </div>
  <div class="item">
    <a  class="link3" href="http://www.deituicms.com">这是标题</a>
  </div>
</div>';
preg_match_all("/<a[^>]*href=\"(.*)\"[^>]*>(.*)<\/a>/iUs",$html,$arr);
print_r($arr);

//日期匹配
// 将文本中的年份增加一年.
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// 回调函数
function next_year($matches)
{
  // 通常: $matches[0]是完成的匹配
  // $matches[1]是第一个捕获子组的匹配
  // 以此类推
  return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
            "|(\d{2}/\d{2}/)(\d{4})|",
            "next_year",
            $text);

本文分享自微信公众号 - 老雷PHP全栈开发(L362606856),作者:雷日锦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 老雷PHP全栈开发教程之Vue基础教程

    Vue是一套用于构建用户界面的渐进式框架,Vue 的核心库只关注视图层,Vue通过数据驱动构建ui界面。

    老雷PHP全栈开发
  • 老雷PHP全栈开发教程之常用html标签

    老雷PHP全栈开发
  • jQuery基础教程之选择器

    老雷PHP全栈开发
  • 关于JS倒计时

    <script type="text/javascript" language="javascript">         function Curr...

    用户2192970
  • Cordova+React+Ant.design项目搭建

    治电小白菜
  • str.方法的整理(字符串类型内置方法的

    作用:移除字符串头与尾的指定字符。(核心是头与尾),移除的结果作为一个返回值,原字符串仍不变。

    py3study
  • vue+axios+echarts实现一个折线图

    前端可视化是一个前端最基本的技能,要想做的好看,还是得借助一下百度家的echarts,那要怎么在Vue中使用echarts?这个官网没有给出实例,实例基本都是在...

    王小婷
  • OC学习12——字符串、日期、日历

      前面主要学习了OC的基础知识,接下来将主要学习Foundation框架的一些常用类的常用方法。Foubdation框架是Cocoa编程、IOS编程的基础框架...

    mukekeheart
  • 基础篇-ObjectC继承、类别、属性

        在实际的开发过程中,继承和类别都会得到很多用处。对于界面相似度很高的情况下,使用继承可以节省很多代码和设置,只需要在子类中重写父类中的方法,或者增加新的...

    進无尽
  • :Spring中BeanFactory与FactoryBean的区别

    BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean()、containsBean()...

    挨踢小子部落阁

扫码关注云+社区

领取腾讯云代金券