正则表达式

用于复杂字符串的处理,简单字符串使用字符串函数处理

语法规则

由一个或者多个:

普通字符

元字符

组成一个字符串

定界符

通常情况下,使用正斜线 / / 作为定界符

注意:定界符前后要一致

处了字母,数字和反斜线以外字符都可以作为定界符

#

!

{}

|

preg_match_all() 按照指定的正则表达式,在给定的字符串内进行搜索,匹配到符合特征的部分取出

preg_match_all($find,$str,[$array])

$find 表示 正则表达式

$str 表示 给定的字符串

$array 表示 查找到的字符串存储的数组

返回值:int,查找的个数

$find = "/Yz/";

$str = "YZZyzyYzzYz";

echo preg_match_all($find,$str,$arr);//2

print_r($arr);//Array ( [0] => Array ( [0] => Yz [1] => Yz ) )

?>

普通字符

没有特殊意义

如:

a-z,A-Z,0-9,单引号,双引号

元字符

\d —— 匹配任意一个十进制数字,等价于[0-9]

$find1 = "/Yz\d/";

$find2 = "/YZ[0-9]/";

$str = "IamYZ5,youareYz1";

echo preg_match_all($find1,$str,$arr1);//1

echo preg_match_all($find2,$str,$arr2);//1

print_r($arr1);//Array ( [0] => Array ( [0] => Yz1 ) )

print_r($arr2);//Array ( [0] => Array ( [0] => YZ5 ) )

?>

\D —— 匹配任意一个除十进制数字以外字符,等价于[^0-9]

$find1 = "/Yz\D/";

$find2 = "/YZ[^0-9]/";

$str = "IamYZ,youareYz.";

echo preg_match_all($find1,$str,$arr1);//1

echo preg_match_all($find2,$str,$arr2);//1

print_r($arr1);//Array ( [0] => Array ( [0] => Yz. ) )

print_r($arr2);//Array ( [0] => Array ( [0] => YZ, ) )

?>

\s —— 匹配任意一个空字符串,比如换页符,换行符,回车符,制表符,垂直制表符

" ",空字符

"\t",制表符

"\n",换行符

"\r",回车符

"\x0B",垂直制表符

$find = "/Yz\s\d/";

$str = "Yz 1,Yz\n1,Yz\t3,Yz\04,Yz\x0B5,Yz\r6";

echo preg_match_all($find,$str,$arr);//5

print_r($arr);

//Array ( [0] => Array ( [0] => Yz 1 [1] => Yz 1 [2] => Yz 3 [3] => Yz�5 [4] => Yz 6 ) )

?>

\S —— 匹配除空白字符以外的任意字符

$find = "/Yz\S\d/";

$str = "Yz 1,Yz\n1,Yz\t3,Yz\04,Yz\x0B5,Yz\r6,Yz77,Yzz8";

echo preg_match_all($find,$str,$arr);//2

print_r($arr);//Array ( [0] => Array ( [0] => Yz77 [1] => Yzz8 ) )

?>

\w —— 匹配任意一个数字或者字母或下划线

$find = "/Yz\w/";

$str = "Yz1,Yzz,Yz_,Yz.,";

echo preg_match_all($find,$str,$arr);//3

print_r($arr);//Array ( [0] => Array ( [0] => Yz1 [1] => Yzz [2] => Yz_ ) )

?>

\W —— 匹配除数字,字母,下划线以外的任意字符

$find = "/Yz\W/";

$str = "Yz1,Yzz,Yz_,Yz.,";

echo preg_match_all($find,$str,$arr);//1

print_r($arr);//Array ( [0] => Array ( [0] => Yz. ) )

?>

"." —— 匹配除换行符以外任意一个字符

使用字符 ".",使用 "/" 转义

* —— 匹配其前边字符,0次,或1次,或多次

$find = "/Yz*/";

$str1 = "Yz,Yzz,Yzzzzzzzzzzzzzzzzzzzzzzzzzz,";

$str2 = "yzYy";

echo preg_match_all($find,$str1,$arr1);//3

print_r($arr1);//Array ( [0] => Array ( [0] => Yz [1] => Yzz [2] => Yzzzzzzzzzzzzzzzzzzzzzzzzzz ) )

echo preg_match_all($find,$str2,$arr2);//1

print_r($arr2);//Array ( [0] => Array ( [0] => Y ) )

?>

+ —— 匹配一次或多次其前边的字符

$find = "/Yz+/";

$str1 = "Yz,Yzz,Yzzzzzzzzzzzzzzzzzzzzzzzzzz,";

$str2 = "yzYy";

echo preg_match_all($find,$str1,$arr1);//3

print_r($arr1);//Array ( [0] => Array ( [0] => Yz [1] => Yzz [2] => Yzzzzzzzzzzzzzzzzzzzzzzzzzz ) )

echo preg_match_all($find,$str2,$arr2);//0

print_r($arr2);//Array ( [0] => Array ( ) )

?>

? —— 匹配 0次或一次其前边的字符

$find = "/Yz?/";

$str1 = "Yz,Yzz,Yzzzzzzzzzzzzzzzzzzzzzzzzzz,";

$str2 = "yzYy";

echo preg_match_all($find,$str1,$arr1);//3

print_r($arr1);//Array ( [0] => Array ( [0] => Yz [1] => Yz [2] => Yz ) )

echo preg_match_all($find,$str2,$arr2);//0

print_r($arr2);//Array ( [0] => Array ( [0] => Y ) )

?>

{n} —— 表示其前边字符出现的次数

$find = "/Yz{3}/";

$str = "Yz,Yzz,Yzzz,Yzzzz";

echo preg_match_all($find,$str,$arr);//2

print_r($arr);//Array ( [0] => Array ( [0] => Yzzz [1] => Yzzz ) )

?>

{n,} —— 表示其前面字符出现不少于n次

$find = "/Yz{3,}/";

$str = "Yz,Yzz,Yzzz,Yzzzz";

echo preg_match_all($find,$str,$arr);//2

print_r($arr);//Array ( [0] => Array ( [0] => Yzzz [1] => Yzzzz ) )

?>

{n,m} —— 表示其前面字符出现不少于n次,最多出现m次

$find = "/Yz{3,4}/";

$str = "Yz,Yzz,Yzzz,Yzzzz,Yzzzzz";

echo preg_match_all($find,$str,$arr);//3

print_r($arr);//Array ( [0] => Array ( [0] => Yzzz [1] => Yzzzz [2] => Yzzzz ) )

?>

^ 或 \A —— 匹配字符串开始的位置,一般放在最前边

$find = "/^Y/";

$str1 = "Yz";

$str2 = "zYz";

echo preg_match_all($find,$str1,$arr1);//1

print_r($arr1);//Array ( [0] => Array ( [0] => Y ) )

echo preg_match_all($find,$str2,$arr2);//0

print_r($arr2);//Array ( [0] => Array ( ) )

?>

$ 或 \Z —— 表示字符串的结束位置,一般放在最后边

$find = "/z$/";

$str1 = "Yz";

$str2 = "zYzY";

echo preg_match_all($find,$str1,$arr1);//1

print_r($arr1);//Array ( [0] => Array ( [0] => z ) )

echo preg_match_all($find,$str2,$arr2);//0

print_r($arr2);//Array ( [0] => Array ( ) )

?>

| —— 匹配两个或多个模式

$find = "/Yz{5}|z{3,4}/";

$str = "Yz,Yzz,Yzzz,Yzzzz,Yzzzzz";

echo preg_match_all($find,$str,$arr);//3

print_r($arr);//Array ( [0] => Array ( [0] => zzz [1] => zzzz [2] => Yzzzzz ) )

?>

—— 匹配方括号中的任意一个字符<?php

$find = "/Y[z,s]/";

$str = "Yz,Ys,Ya,Yb,Yc";

echo preg_match_all($find,$str,$arr);//2

print_r($arr);//Array ( [0] => Array ( [0] => Yz [1] => Ys ) )

?>

[^] —— 匹配除了方括号中字符外的任意字符

$find = "/Y[^z,s]/";

$str = "Yz,Ys,Ya,Yb,Yc";

echo preg_match_all($find,$str,$arr);//3

print_r($arr);//Array ( [0] => Array ( [0] => Ya [1] => Yb [2] => Yc ) )

?>

() —— 将括号中的内容作为一个整体,方便将其内容获取到

$find = "/Y(z)/";

$str = "Yz,Yzz,Yzzz,Yzzzz";

echo preg_match_all($find,$str,$arr);//4

print_r($arr);

//Array ( [0] => Array ( [0] => Yz [1] => Yz [2] => Yz [3] => Yz ) [1] => Array ( [0] => z [1] => z [2] => z [3] => z ) )

?>

可以使用 "\数字" 来匹配第几个括号,

// \\2 等价于 (z)

// \\1 等价于 (Y)

$find = "/(Y)(z)\\2\\2/";

$str = "Yz,Yzz,Yzzz,Yzzzz";

echo preg_match_all($find,$str,$arr);//

print_r($arr);

//Array ( [0] => Array ( [0] => Yzzz [1] => Yzzz ) [1] => Array ( [0] => Y [1] => Y ) [2] => Array ( [0] => z [1] => z ) )

?>

//第一个数组表示匹配到的内容

//第二个数组表示第一个括号每次匹配

//第三个数组表示第二个括号每次匹配

当括号(.)时,\n 所对应的字符 必须是 (.)在字符串中匹配的内容

$find = "/Y(.)\\1/";

$str = "Yza,Yzs,Yzz";

echo preg_match_all($find,$str,$arr);//1

print_r($arr);//Array ( [0] => Array ( [0] => Yzz ) [1] => Array ( [0] => z ) )

?>

练习使用

使用 .* ,贪婪匹配

$find = "/{.*}/";

$str = "{name:'小明',class:1526}";

echo preg_match_all($find,$str,$arr);//1

print_r($arr);//Array ( [0] => Array ( [0] => {name:'小明',class:1526} ) )

?>

匹配所有满足条件的内容

$find = "/{.*}/";

$str = "{{name:'小明'},{class:1526}}";

echo preg_match_all($find,$str,$arr);//1

print_r($arr);//Array ( [0] => Array ( [0] => {{name:'小明'},{class:1526}} ) )

?>

//直到匹配到最后一个 } ,忽略中间情况

使用 .*? ,懒惰匹配

$find = "/{.*?}/";

$str = "{{name:'小明'},{class:1526}}";

echo preg_match_all($find,$str,$arr);//2

print_r($arr);

//Array ( [0] => Array ( [0] => {{name:'小明'} [1] => {class:1526} ) )

?>

//匹配到最近一个 } ;

模式修正符

i —— 在匹配时,不区分大小写

$find = "/Yz/i";

$str = "yz,Yz,YZ";

echo preg_match_all($find,$str,$arr);//3

print_r($arr);//Array ( [0] => Array ( [0] => yz [1] => Yz [2] => YZ ) )

?>

m —— 多行匹配

使用条件:

目标字符串包含 "\n",表示换行

正则表达式必须出现 $

$find = "/Yz/m";

$str1 = "Yz\nYz\nYz\n";

$str2 = "Yz

Yz

Yz";

echo preg_match_all($find,$str1,$arr1);//3

print_r($arr1);//Array ( [0] => Array ( [0] => Yz [1] => Yz [2] => Yz ) )

echo preg_match_all($find,$str2,$arr2);//3

print_r($arr2);//Array ( [0] => Array ( [0] => Yz [1] => Yz [2] => Yz ) )

?>

$str2 = "Yz

Yz

Yz";

//这种格式会存在问题,有些系统不支持

// Windows 操作系统中可以看到的换行时通过两个字符来完成的,(\r\n)

//Linux操作系统中看到的换行就是由 \n 来完成的

//

s —— 若设定此修正符, "." 将匹配所有的符号,包括换行符

$find1 = "/Yz./";

$find2 = "/Yz./s";

$str = "yz,Yz\nYZ";

echo preg_match_all($find1,$str,$arr);//0

print_r($arr1);//Array ( [0] => Array ( ) )

echo "
";

echo preg_match_all($find2,$str,$arr);//1

print_r($arr2);//Array ( [0] => Array ( [0] => Yz [1] => Yz [2] => Yz ) )

?>

U —— 禁止贪婪匹配

$find = "/{.*}/U";

$str = "{{name:'小明'},{class:1526}}";

echo preg_match_all($find,$str,$arr);//2

print_r($arr);//Array ( [0] => Array ( [0] => {{name:'小明'} [1] => {class:1526} ) )

?>

e

A

D

S

u

X

J

u

正则表达式匹配的函数

preg_match()

执行匹配正则表达式

preg_match($find,$str,[$array],[flags],[offset])

$find 表示 正则表达式

$str 表示 给定的字符串

$array 表示 查找到的字符串存储的数组

flags 表示 设置标记值:

PREG_OFFSET_CAPTURE —— 对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。

也就是找到字符串的位置

offst 表示 搜索从目标字符串开始的位置

如果 offset 比 $str 的长度还要大则返回 FALSE。

$find = "/Y(.*?)z/";

$str = "Yz,Yzz,Yzzz,Yzzzz,Yzzzzz";

echo preg_match_all($find,$str,$arr);//5

print_r($arr);

//Array ( [0] => Array ( [0] => Yz [1] => Yz [2] => Yz [3] => Yz [4] => Yz ) [1] => Array ( [0] => [1] => [2] => [3] => [4] => ) ) echo preg_match($find,$str,$arr);//1

echo preg_match($find,$str,$arr);//1

print_r($arr);//Array ( [0] => Yz [1] => )

?>

返回值:preg_match()返回 $find 的匹配次数。 它的值将是0次(不匹配)或1次,

$find = "/Y(.*?)z/";

$str = "Yz,Yzz,Yzzz,Yzzzz,Yzzzzz";

echo preg_match($find,$str,$arr,PREG_OFFSET_CAPTURE,5);//1

print_r($arr);//Array ( [0] => Array ( [0] => Yz [1] => 7 ) [1] => Array ( [0] => [1] => 8 ) )

?>

//数组匹配到的位置,匹配数组的第二个参数

因为preg_match()在第一次匹配后 将会停止搜索。

preg_match_all()

按照指定的正则表达式,在给定的字符串内进行搜索,匹配到符合特征的部分取出

preg_match_all($find,$str,[$array],[flags],[offset])

$find 表示 正则表达式

$str 表示 给定的字符串

$array 表示 查找到的字符串存储的数组

flags 表示 设置标记值:

PREG_PATTERN_ORDER —— 默认使用次排序标记

PREG_SET_ORDER —— matches[0]包含第一次匹配得到的所有匹配(包含子组),以此类推

PREG_OFFSET_CAPTURE ——对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。

也就是找到字符串的位置

offst 表示 搜索从目标字符串开始的位置

如果 offset 比 $str 的长度还要大则返回 FALSE。

返回值:int,查找的个数

$find = "/Yz/";

$str = "YZZyzyYzzYz";

echo preg_match_all($find,$str,$arr);//2

print_r($arr);//Array ( [0] => Array ( [0] => Yz [1] => Yz ) )

?>

preg_replace

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

preg_replace($find,$replace,$str,[limit],[count])

$find 表示 正则表达式

$replace 表示 替换用的字符串

$str 表示 给定的字符串

limit 表示 设置替换的最大次数,默认为-1,无限次

count 表示 完成的替换次数。

返回值:若$str为数组,则返回一个数字,其他情况下返回一个字符串

注意:不能使用模式修正符\e,否则会产生一个 E_DEPRECATED 错误

$find = "/(.*?)/";

$replace = "这个加粗显示了";

$str = "

加粗显示正常显示加粗显示

";

echo preg_replace($find,$replace,$str,-1,$count);//这个加粗显示了正常显示这个加粗显示了

echo $count;//2

echo preg_replace($find,$replace,$str,0);//加粗显示正常显示加粗显示

echo preg_replace($find,$replace,$str,1);//这个加粗显示了正常显示加粗显示

?>

$find = "/(.*?)/";

$replace = "$2";

$str = "

加粗显示正常显示加粗显示

";

echo preg_replace($find,$replace,$str,-1,$count);//这个加粗显示了正常显示这个加粗显示了

?>

可以看出

2匹配第二个括号的内容,每匹配一次替换一次

replace 为数组,必须 一 一 对应

$find = ["/(.*?)/","/(.*?)/"];

$replace = ["我红了","我绿了"];

$str = "

加粗显示正常显示倾斜显示

";

echo preg_replace($find,$replace,$str);//我红了正常显示我绿了

?>

php基础 正则表达式,PHP基础 —— 正则表达式相关推荐

  1. 正则表达式从基础到深入实战

    正则表达式从基础到深入实战 什么是正则? 正则就是一个规则,用来处理**字符串**的规则 1.正则匹配 编写一个规则,验证某个字符串是否符合这个规则,正则匹配使用的是 test 方法 2.正则捕获 编 ...

  2. Python基础(十一)--正则表达式

    Python基础(十一)--正则表达式 1 简述 正则表达式可以对指定的字符串与模式之间执行模式匹配.模式可以是普通的字符串,也可以是含有特殊意义字符的字符串.通过正则表达式,我们可以进行查找,校验等 ...

  3. python之正则表达式(基础篇)

    前言 在向网页进行了提交请求之类的之后,我们可以得到了网页的返回内容,里面自然而然会有我们想要的数据,但是html元素文本这么多,我们不可能一 一去找我们需要的数据,这时就需要用到正则表达式了,正则表 ...

  4. javascript中正则表达式的基础语法

    前面的话 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为 ...

  5. iOS开发中正则表达式的基础使用

    正则表达式?什么是正则表达式? 百度百科给出的解释是这样的:正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 根据我的学习,我理解的正则表达式是:一个字符串,这个字符串用来描述我们 ...

  6. [绍棠] iOS开发中正则表达式的基础使用

    正则表达式?什么是正则表达式? 百度百科给出的解释是这样的:正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 根据我的学习,我理解的正则表达式是:一个字符串,这个字符串用来描述我们 ...

  7. Python—正则表达式的基础知识

    文章目录 正则表达式 引入案例 python正则表达式的基础 简单函数的说明 单字符匹配规则 数量匹配规则 表示边界 匹配分组 正则表达式 正则表达式,又称规则表达式**.**(英语:Regular ...

  8. python正则表达式入门_Python正则表达式教程之一:基础篇

    前言 之前有人提了一个需求,我一看此需求用正则表达式最合适不过.考虑到之前每次使用正则表达式,都是临时抱佛脚,于是这次我就一边完成任务一边系统的学习了一遍正则表达式.主要参考PyCon2016上的一个 ...

  9. Python网络爬虫与信息提取(三)(正则表达式的基础语法)

    ①信息组织与提取方法 信息标记的三种形式:XML.JSON.YAML 三种信息标记形式的比较: XML ==> 最早的通用信息标记语言,可扩展性好,但繁琐:是Internet上的信息交互与传递. ...

  10. 帮你梳理正则表达式的基础知识

    正则表达式在我们平时的工作中相当的常用,无论是写jmeter脚本,或者写自动化脚本,都可能会用到正则表达式.这篇文章主要梳理正则表达式的常用知识点,并结合一些具体的例子,让大家能掌握使用正则表达式的正 ...

最新文章

  1. 通过产品ID得到collection!!!
  2. vsftp mysql_vsftp mysql安装配置
  3. ERP与全面预算管理如何结合
  4. 卷积和池化matlab 实现,UFLDL新版教程与编程练习(七):Convolution and Pooling(卷积和池化)...
  5. editplus 快捷键
  6. springboot jwt token前后端分离_基于Spring Boot+Spring Security+JWT+Vue前后端分离的开源项目...
  7. linux内核那些事之虚拟空间划分
  8. grpc python stream_Python gRPC笔记
  9. linux 的学习笔记-linux 指令大全
  10. Oracle的去重函数 distinct
  11. 如何优雅的在微信小程序使用 SVG 字体图标
  12. android 涨潮动画加载_潮汐apk客户端-潮汐android最新版APP下载v2.0.1.1 免费版-腾牛安卓网...
  13. 【51单片机开发板】可调周期、占空比pwm工程
  14. 大数据有十大应用领域,看看你用到了哪个?
  15. 分享一个蛋白互作网站——String (一)
  16. Android版本和SDK版本
  17. android指南针功能,轻松实现Android指南针功能
  18. 大学生笔记本选购指南(2018)
  19. Crosslink-NX器件应用案例(2): MIPI的多源合成(MUX)与分发(DeMUX)
  20. 回车与换行符的区别及python中使用

热门文章

  1. PinPoint使用手册
  2. 点击图片实现放大图片
  3. XMind ,印象笔记, Effie 哪个更加适合影评人?
  4. linux 模块化编译,linux里模块编译的问题
  5. 如何导出/导入PDF中的书签——FreePic2Pdf
  6. Pgpool-II安装部署
  7. 一篇文章全面了解监控知识体系
  8. Springboot吞吐量优化解决方案
  9. Win11的两个实用技巧系列之电脑system占用高的解决办法
  10. 10个美妙的Python装饰器