PHP正则表达式之定界符和原子介绍


Posted in PHP onOctober 05, 2012

本节内容我们将介绍PHP中正则 表达式的基础语法:定界符和原子。内容包含了定界符的定义以及原子的定义和构成等等。其中原子的构成十分灵活,以便满足我们对处理字符串的需求。在这之 前,我们需要先了解一个正则表达式处理函数preg_match()来进行测试,以方便我们教程示例的进行。

先来看一下正则表达式的定界符、正则表达式的构成以及preg_match()函数:

1,正则表达式的定界符。

除了字母、数字和反斜线\以外的任何字符都可以为定界符号,比如 | |、//、{}、!!等等,但是需要注意,如果没有特殊需要,我们都使用正斜线//作为正则表达式的定界符号。

2,正则表达式的构成。

我们看一下这个公式:/原子和元字符/模式修正符

也就是说,正则表达式的原子和元字符都放在定界符之间,而模式修正符放在定界符之外。

3,preg_match()函数

我们会在后面进行详细解释,这里只是为了帮助测试,其返回一个布尔值,表示是否成功匹配。

了解完以上简单的内容,让我们进入正题。

正则表达式中的原子

什么是原子?原子是正则表达式的最基本组成单位,而且必须至少要包含一个原子。只要一个正则表达式可以单独使用的字符,就是原子。

这个概念可能看起来很模糊,没关系,下面我们来介绍一下正则表达式中原子的构成方式。

原子构成方式
1,所有打印(所有可以在屏幕上输出的字符串)和非打印字符(看不到的,比如空格,换行符等等)

2,如果所有有意义的字符,想做为原子使用,统统使用“\”转义字符进行转义即可。如:\. \* \+ \? \( \<\>。

注意:" \ "转义字符可以将有意义的字符转成没意义的字符,还可以将没意义的字符转为有意义的字符。如:\d表示任意一个十进制的数字。

3,在正则表达式中可以直接使用一些系统提供的代表范围的原子,如下面的表格所示:

代表范围的原子  说明  自定义原子表示法
 \d  表示任意一个十进制的数字  [0-9]
 \D  表示任意一个除数字这外的字符  [^0-9]
 \s  表示任意一个空白字符,空格、\n\r\t\f  [\n\r\t\f ]
 \S  表示任意一个非空白  [^\n\r\t\f ]
 \w  表示任意一个字 a-zA-Z0-9_  [a-zA-Z0-9_]
 \W  表示任意一个非字,除了a-zA-Z0-9_以外的任意一个字符  [^a-zA-Z0-9_]

4,自定义原子表(使用方括号[]),可以匹配方括号中的任何1个原子。

在上面的表格中我们已经将系统提供的范围原子使用自定义的方式作了等价转换。由于系统不可能提供所有我需要的原子,所以自定义原子表就显得十分必要了,比如我们想要匹配字母或者数字,就需要将原子写成[a-zA-Z0-9]。

这里需要注意:

A,符号“-”表示范围,如[a-z]表示小写字母a到z,但千万不要写成[a-9]这种形式!

B, 符号“^”表示取反,一定要放在方括号的开头,比如我们想要匹配非数字,则原子为[^0-9]。

下面我们来看一下正则表达式原子的使用实例,代码如下:

<?php 
$pattern = '/\d/';//数字原子表,也就是正则表达式的模式 
$string = 'dsadsadsa';//需要匹配的字符串 
if(preg_match($pattern, $string)){ 
echo "正则表达式<strong>{$pattern} </strong>和字符串 <strong>{$string}</strong> 匹配成功"; 
}else{ 
echo "<span style="color: red;">正则表达式{$pattern}和字符串{$string}匹配失败</span>"; 
} 
?>

注意:自定义原子表中的原子有一个被字符串匹配上,就匹配成功了。而去掉自定义原子表的方括号,则表示匹配整个字符串。如'/abc/'表示字符串中必须有abc这个子串才能被匹配,而'/[abc]/'表示字符串中只要包含a、b和c中的任何一个字符,即被匹配。

大家可以将上面实例中的模式进行修改(也就是正则表达式的模式变量$pattern),进而对我们本节所讲的正则表达式的原子进行验证。

本节关于正则表达式的定界符和原子就介绍完了,相信在练习的基础上,你已经会使用正则表达式的原子了。下节我们将介绍php正则表达式中的元字符,不要错过啊。

PHP 相关文章推荐
php pack与unpack 摸板字符字符含义
Oct 29 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
Aug 12 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
php MessagePack介绍
Oct 06 PHP
2014过年倒计时示例
Jan 31 PHP
php实现的短网址算法分享
Jun 20 PHP
php画图实例
Nov 05 PHP
PHP实现阳历到农历转换的类实例
Mar 07 PHP
程序员的表白神器“520”大声喊出来
May 20 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
PHP超级全局变量数组小结
Oct 04 #PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 #PHP
php 保留字列表
Oct 04 #PHP
php使HTML标签自动补全闭合函数代码
Oct 04 #PHP
php中explode与split的区别介绍
Oct 03 #PHP
PHP explode()函数用法、切分字符串
Oct 03 #PHP
PHP读取文件并可支持远程文件的代码分享
Oct 03 #PHP
You might like
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
python交易记录链的实现过程详解
2019/07/03 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
如何用python批量调整视频声音
2020/12/22 Python
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
机电一体化专业应届本科生求职信
2013/09/27 职场文书
外贸采购员求职的自我评价
2013/11/26 职场文书
房地产推广策划方案
2014/05/19 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
公务员年度个人总结
2015/02/12 职场文书
刘胡兰观后感
2015/06/16 职场文书
区域销售大会开幕词
2016/03/04 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js