PHP正则表达式_php 正则-程序员宅基地

技术标签: PHP学习笔记  PHP正则表达式  

一、正则表达式语法(Perl风格)

1、模式规则
  /php/ 字符串前后加上两条斜杠即可

2、匹配函数
   preg_match(’/php/’,php)
  参数1 模式
  参数2 字符串


二、正则表达式中的元素

介绍
  1、正则表达式中包含三种元素分别为:量词、元字符、修饰符
  2、前导字符串:就是符号前面的一个字符或字符串

量词

量词 说明
+ 匹配任何至少包含一个前导字符串
* 匹配任何包含零个或多个前导字符串
? 匹配任何包含零个或1个前导字符串
. 匹配任意一个字符串
{x} 匹配任何包含x个前导字符串
{x,y} 匹配任何包含 x 到 y 个前导字符串
{x,} 匹配任何包含至少x个前导字符串
^ 匹配字符串的行首
$ 匹配字符串的行尾
| 选择符 匹配字符串的左边或者右边
() 分组,提取

	//量词
	//preg_match()函数匹配成功返回1,失败返回0
	echo preg_match('/a+/','abc');//返回1
	echo preg_match('/a*/','abc');//返回1
	echo preg_match('/a?/','abc');//返回1
	echo preg_match('/./','abc');//返回1
	echo preg_match('/a{2}/','aabc');//返回1
	echo preg_match('/a{2,5}/','aaabc');//返回1
	echo preg_match('/a{2,}/','aaaaabc');//返回1
	echo preg_match('/^a/','bac');//返回0
	echo preg_match('/^a/','abc');//返回1
	echo preg_match('/a$/','abc');//返回0
	echo preg_match('/a$/','cba');//返回1
	echo preg_match('/a|b/','a');//返回1
	echo preg_match('/a|b/','b');//返回1
	echo preg_match('/(abc)+/','abcd');//返回1

元字符

元字符 说明
[a-z] 匹配任何包含小写字母a-z的字符串
[A-Z] 匹配任何包含大写字母A-Z的字符串
[0-9] 匹配任何包含0-9的字符串
[abc] 匹配任何包含小写字母a,b,c的字符串
[^abc] 匹配任何不包含小写字母a,b,c的字符串
[a-zA-Z0-9_] 匹配任何包含a-zA-Z0-9和下划线的字符串
\w 匹配任何包含a-zA-Z0-9和下划线的字符串
\W 匹配任何不包含a-zA-Z0-9和下划线的字符串
\d 匹配任何包含数字字符
\D 匹配任何非数字字符
\s 匹配任何空白字符
\S 匹配任何非空白字符
\b 匹配是否到达了单词边界
\B 匹配没有到达了单词边界
\ 匹配正则中的特殊字符

	//元字符
	echo preg_match('/[a-z]/','abc');//返回1
	echo preg_match('/[A-Z]/','ABC');//返回1
	echo preg_match('/[0-9]/','123');//返回1
	echo preg_match('/[abc]/', 'a');//返回1
	echo preg_match('/[^abc]/', 'd');//返回1
	echo preg_match('/[a-zA-Z0-9_]/', 'aD45_');//返回1
	echo preg_match('/\w/', 'aD45_');//返回1
	echo preg_match('/\W/', 'aD45_');//返回0
	echo preg_match('/\d/', '123456');//返回1
	echo preg_match('/\D/', '123456');//返回0
	echo preg_match('/\d/', '123456');//返回1
	echo preg_match('/\s/', ' ');//返回1
	echo preg_match('/\S/', ' ');//返回0
	//单词尾部边界
	echo preg_match('/at\b/', 'cat');//返回1
	//头单词部边界
	echo preg_match('/\bat/', 'attribute');//返回1
	//没有到达边界
	echo preg_match('/\Bat/', 'attribute');//返回0
	//特殊字符 $ ^ * () + = {} [] | \\ : <>
	echo preg_match('/\$/', '$');//返回1

修饰符

修饰符 说明
i 完全不区分大小写
m 可以采用多行识别,遇到换行也承认匹配规则
x 忽略掉规则模式中的空白字符
A 强制从头开始匹配
U 禁止贪婪匹配,只跟踪到最近的一个匹配符并结束

	//修饰符
	
	//i 不区分大小写
	echo preg_match('/abcd/','AbcD');//返回0
	echo preg_match('/abcd/i','AbcD');//返回1

 	//m 多行识别
 	$str = '1a
1a';
	preg_match_all('/^1a/',$str,$arr);
	print_r($arr);
	//结果为Array ( [0] => Array ( [0] => 1a ) )
	//默认从头到尾匹配,所以只匹配到一个

	preg_match_all('/^1a/m',$str,$arr);//返回1
	print_r($arr);
	//结果为Array ( [0] => Array ( [0] => 1a [1] => 1a ) )
	//每行都会使用规则,所以匹配的到二个,注意第二行前面不要有空格避免干扰


	//x 忽略模式的空格
	echo preg_match('/a b/','ab');//返回0
	echo preg_match('/a b/x','ab');//返回1

	//A 强制开头匹配
	echo preg_match('/ab/','catabc');//返回1
	echo preg_match('/ab/A','catabc');//返回0
	echo preg_match('/ab/A','abcdef');//返回1

	//U 禁止贪婪匹配
	preg_match_all('/php\w+php/','php123phpphp456php',$arr);
	print_r($arr);
	//结果为Array ( [0] => Array ( [0] => php123phpphp456php ) )

 	preg_match_all('/php\w+php/U','php123phpphp456php',$arr);
	print_r($arr);
	//结果为Array ( [0] => Array ( [0] => php123php [1] => php456php ) )
	//禁止贪婪匹配后,会就近匹配

三、Perl风格函数

1、preg_grep()
  搜索数组中的所有元素,返回与某个模式匹配的字符串数组

2、preg_match()
  搜索模式,匹配返回true,不匹配返回false

3、preg_match_all()
  在字符串匹配模式的所有出现,然后将所有匹配的全部放入数组

4、preg_quote()
  将特殊字符转义
  特殊字符包含 $ ^ * () + = {} [] | \ : <>
  定界正则,在每一个对于正则表达式语法而言有特殊含义的字符前插入一个反斜杠

5、preg_replace()
  替换模式的所有出现,然后替换成想要的字符串返回出来

6、preg_split()
  以不区分大小写将字符串划分不同的元素

	//风格函数
	//preg_grep()
	$arr = array('php5','php6','php7','css','html');
	$out = preg_grep('/php[0-9]/', $arr);
	print_r($out);
	//结果为Array ( [0] => php5 [1] => php6 [2] => php7 )

	//preg_match()
	echo preg_match('/php[0-9]/','php5');//返回1
	
	//preg_match_all()
	preg_match_all('/php[0-9]/','php5php6php7',$arr);
	print_r($arr);
	//结果为Array ( [0] => Array ( [0] => php5 [1] => php6 [2] => php7 ) )

	//preg_quote()
	echo preg_quote(' $ ^ * () + = {} [] | \\ : <>');
	//结果为 \$ \^ \* \(\) \+ \= \{\} \[\] \| \\ \: \<\>
	
	//preg_replace()
	echo preg_replace('/php/','python', 'php1php2php3');
	//结果为 python1python2python3

	//preg_split()
	$str = preg_split('/a/', 'cbabc');
	print_r($str);
	//结果为rray ( [0] => cb [1] => bc )

学习总结

  学习好正则表达式,不是一朝一夕的事,要掌握好这些基本的元素。量词、元字符、修饰符,每个都不能忽视,搭配起来使用,多多练习才能熟能生巧。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kelinfeng16/article/details/82632796

智能推荐

R2机器人加载棋盘与棋子模型,对urdf、sdf的解释(区分srdf)_sdf和urdf-程序员宅基地

文章浏览阅读3k次,点赞51次,收藏41次。熟悉这些机器人的常见格式,对于创建和操作机器人是至关重要的_sdf和urdf

设计概念_设计概念功能独立-程序员宅基地

文章浏览阅读745次。一、软件工程中的设计数据设计或类设计将类模型转化为设计类的实现以及软件实现所要求的数据结构。体系结构设计定义了软件的主要结构化元素之间的关系、可满足系统需求的体系结构风格和模式以及影响体系结构实现方式的约束。接口设计描述了软件和协作系统之间、软件和使用人员之间如何通信。构件级设计将软件体系结构的结构化元素变换为对软件的过程性描述。二、软件质量指导原则和属性软件质量指导原则..._设计概念功能独立

Kettle定时任务调度_kettle任务调度-程序员宅基地

文章浏览阅读6.8k次,点赞10次,收藏65次。文章目录一、打开软件1.1 打开kettle1.2 打开SQL Server1.3 打开navicat1.3.1 navicat连接sqlserver准备sql server数据表(dept)准备sql server数据表(emp)1.3.2 navicat连接mysql1.4 可能出现的bug问题Error connecting to database: (using class org.gjt.mm.mysql.Driver)Error connecting to database: (using c._kettle任务调度

强力推荐!那些你不能错过的 GitHub 插件和工具_github与gitpod的插件-程序员宅基地

文章浏览阅读1.4w次,点赞5次,收藏19次。http://www.gad.qq.com/article/detail/32503以代码托管平台起家的 GitHub 网站,已然成为全球程序员工作和生活中不可或缺的一份子。从优秀的企业,到优秀的程序员,都将自己最优秀的代码作品存放在这片开源净土里,供彼此学习交流。GitHub Trending 栏目甚至已经成为 IT 从业人员的新闻日报,每日必读。既然 GitHu_github与gitpod的插件

PTPX中的time_based analysis-程序员宅基地

文章浏览阅读1.1k次。根据VCD文件的type,PTPX支持instantaneous peak power analysis和cycle_accurate peakpower analysis。Time-Based Power Analysis支持的VCD type 由于Gate_level和zero_delay的VCD不支持event propa..._ptpx time

VisualSVN安装图解-程序员宅基地

文章浏览阅读79次。VisualSVN安装教程、、、-----------------------------------参考网址:https://www.visualsvn.com/server/download/安装参考网址:http://www.jb51.net/article/71815.htm----------------------------------------------..._安装visualsvn

随便推点

程序员语言也有鄙视链!某美团程序员爆料:筛选简历时,用go语言的基本不看!网友:当韭菜还当出优越感了!...-程序员宅基地

文章浏览阅读645次。程序员使用的语言有鄙视链吗?有人说有,有人说没有。一个美团员工发帖说,筛选简历时用go语言的基本不看。短短一句话,把对go语言的鄙视体现得淋漓尽致,难道go语言真的不如其他语言?和他一..._go语言的鄙视链

小说网站系统源码|PHP付费小说网站源码带app-程序员宅基地

文章浏览阅读5.3k次。在本文中,我将解释如何将ink与Unity项目集成,以及如何使用ink API与我们的小说网站源码系统进行交互。在我们开始之前,请确保您有一个包含一些对话和选择的墨水文件。您可能想下载并使用我准备的示例故事。这实际上是来自Guilt Free的简化场景,通过分享这一点,我想向您展示一个真实的视觉小说系统源码示例和实际代码的技术。完整源码:xsymz.icu项目设置继续在 Unity 中创建一个新的 2D 项目。然后添加您可以在此处找到的墨水插件。在ink插件文件夹(Plugins/Ink)里会有一_小说网站源码

Swift编码规范_swift 正则判断文件类型-程序员宅基地

文章浏览阅读531次。参考API Design Guidelineshttps://swift.org/documentation/api-design-guidelines/swift-style-guidehttps://github.com/raywenderlich/swift-style-guide项目命名规范一、工程文件夹、文件目录结构【业务模块】1、文件夹采用下划线命名,名字全部小写下划线间隔,如module_login2、文件、类、结构体、枚举、协议采用大驼峰命名,每个单词首字母大写,如 MyCu_swift 正则判断文件类型

关于shell 中return用法解释(转)_shell return-程序员宅基地

文章浏览阅读2.2w次。1、return命令会使得一个函数返回.return命令会返回一个单一的数字参数, 而这个数字参数在调用这个函数的脚本中是可见的.如果没有指定返回参数,return在默认情况下会返回上一次命令的返回代码。2、了解一个概念:return value ﹗我们在 shell 下跑的每一个 command 或 function ,在结束的时候都会传回父行程一个值,称为 return value 。在 shell command line 中可用 $? 这个变量得到最"新"的一个 return value_shell return

Linux编译宏BUILD_BUG_ON_ZERO-程序员宅基地

文章浏览阅读834次。本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码片段(不关注OS的各个模块的设计思想,此部分我准备写在“深入理解Linux Kernel”系列文章中),一来通过内核代码复习一下C语言及汇编语言的语法,二来学习内核开发大牛们书写代码的风格及思路。理解了上面之后,再来看看第二个BUILD_BUG_ON_NULL(e)宏,与第一个类似,-------------------------------------完--------------------------------_build_bug_on_zero

c51语言单片机打铃系统设计,基于单片机的自动打铃系统的设计-程序员宅基地

文章浏览阅读678次。//调用单片机头文件#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255#define uint unsigned int //无符号整型 宏定义 变量范围0~65535#include "eeprom52.h"#include "nongli.h"bit flag_2..._基于单片机的自动打铃控制系统设计提纲

推荐文章

热门文章

相关标签