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 彩色文字实现代码
Jun 29 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
php addslashes 利用递归实现使用反斜线引用字符串
Aug 05 PHP
PHP中copy on write写时复制机制介绍
May 13 PHP
php+memcache实现的网站在线人数统计代码
Jul 04 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
php+websocket 实现的聊天室功能详解
May 27 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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 函数执行效率的小比较
2010/10/17 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
信息技术专业个人自我评价
2013/12/11 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
客户服务经理岗位职责
2014/01/29 职场文书
安全先进个人材料
2014/12/29 职场文书
大学教师个人总结
2015/02/10 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技