php中正则表达式
来源:互联网 发布:波利亚计数定理 知乎 编辑:程序博客网 时间:2024/05/16 23:50
原子
原子,也叫原子字符,是正规表达式函数操作的对象。
学习之前先搞清三个概念:
1. 原子是正则表达式的最小单位;
2. 每个正则模式中,至少要包含一个原子;
3. 原子必须由可打印和非打印字符组成。
* * * * * ## 原子的组成: >[info] 大体上,可以将原子字符分为5类:2. 每个正则模式中,至少要包含一个原子;
3. 原子必须由可打印和非打印字符组成。
下面我们详细介绍一下这五类原子:
1. 普通字符做原子:
普通字符:就是我们可以在屏幕上看见的字符,如字母、数字等。
'a-z'
/php/ , /abc/,/google/
2大写字母/'A-Z'
/THINKPHP/, /CHINA/
3数字/'0-9'
/3.14/, /18/
一个原子匹配目标字符串中的一个字符,逐一对应。
- 实例:
<?phpecho preg_match('/php/', 'thinkphp') ? '匹配成功<br />' : '匹配失败<br />'; //匹配成功echo preg_match('/PHP/', 'ThinkPHP') ? '匹配成功<br />' : '匹配失败<br />'; //匹配成功echo preg_match('/5/', 'ThinkPHP5') ? '匹配成功<br />' : '匹配失败<br />'; //匹配成功
2. 特殊字符和元字符做原子:
元字符在正则中有特殊用途,是用来修饰原子的,下节课会详细讨论,这里你只需要知道,元字符做原子时,不能直接使用,必须转义,使其变成普通原子字符。
'\.', '\+', '\?', '\$', '\*'
2特殊字符'\<br \/>'
匹配是否出现‘<br />’
标记- 实例:
<?phpecho preg_match('/\./', 'ThinkPHP5.0') ? '匹配成功<br />' : '匹配失败<br />'; //匹配成功//<br /> 需要3次转义:2个尖括号'<'和'>',1个反斜杠'/' echo preg_match('/\<br\/\>/', 'ThinkPHP5<br/>') ? '匹配成功<br />' : '匹配失败<br />';//匹配成功
3. 非打印字符做原子:
非打印字符,也叫不可见字符,主要是一年格式控制符。
- 最常用的有四个:
'\n'
匹配一个换行符,等价于:'\x0a'
2'\r'
匹配一个回车符,等价于:'\x0d'
3'\f'
匹配一个换页符,等价于:'\x0c'
4'\t'
匹配一个制表符,等价于:'\x09'
5'\v'
匹配一个垂直制表符,等价于:'\x0b'
- 实例:
<?phpecho preg_match('/\r\n/', "ThinkPHP5.0\r\n") ? '匹配成功<br />' : '匹配失败<br />';//匹配成功
代码分析:
- 目标字符串
"ThinkPHP5.0\r\n"
必须要用双引号""包起来,因为只有双引号里的字符串才可以解析所有转义字符; - 单引号内只解析2种:单引号自身
'\'
和 转义符自身\\
不可见,不代表不存在。不可见字符仅仅是无法用肉眼看见,但可以感知存在。
4. 通配字符做原子:
通配字符,也叫通用字符、类字符。我个人觉得叫:类字符更贴切~~
'\d'
匹配任意一个十进制数,等价于:[0-9]
2'\D'
匹配任意一个除十进制以外的字符,等价于:[^0-9]
3\w
匹配任意一个字母/数字/下划线字符,等价于:[a-zA-Z0-9_]
4\W
匹配任意一个除字母/数字/下划线之外的字符,等价于:[a-zA-Z0-9_]
5\s
匹配任意一个空白字符(非打印),等价于:[\f\n\r\t\v]
6\S
匹配任意一个除空白字符以外的字符,等价于:[^\f\n\r\t\v]
####类原子匹配的是一类字符(字符集合),不再是一个字符~~
- 实例:
<?php//匹配十进制数0-9,等价于:[0-9]echo preg_match('/\d\./', "3.1415926") ? '匹配成功<br />' : '匹配失败<br />';//匹配成功//匹配大小写字母和下划线,等价于:[a-zA-z0-9_]echo preg_match('/\w/', "ThinkPHP5.0") ? '匹配成功<br />' : '匹配失败<br />';//匹配成功//匹配字符串中的空格符,等价于:[\r\n\r\t\v]echo preg_match('/\s/', "Think PHP5.0") ? '匹配成功<br />' : '匹配失败<br />';//匹配成功
5. 自定义原子:
尽管上面所说的原子已经很丰富了,但不能穷举全部原子类型,如果上面不符合要求,就需要我们自己动手,创建自己的原子啦!
1. 自定义原子是一个集合,可以匹配一个,也可以匹配多个字符;
2. 自定义原子列表,使用方括号'[ ]',括号内所有原子地位平等,顺序可随意调整;
3. 自定义原子列表中,可以使用排除符号'^',过滤掉不符合要求字符。
2. 自定义原子列表,使用方括号'[ ]',括号内所有原子地位平等,顺序可随意调整;
3. 自定义原子列表中,可以使用排除符号'^',过滤掉不符合要求字符。
[单个字符列表]
如:'\[AJ]SP\'
,表示:ASP和JSP,任选一个做为原子2[^单个字符列表]
'^'
:表示取反,如 '\[^AJ]SP\'
,表示:除ASP和JSP之外,任选一个做为原子3[a-zA-Z0-9_]
如果原子集合中某类字符是连续的,可以用'-'
符号连接起始字符,表示字符区间- 实例:
<?php//匹配十进制数字: \decho preg_match('/[0-9]/', "3.1415926") ? '匹配成功<br />' : '匹配失败<br />';//匹配大小写字母和十进制数字echo preg_match('/[a-zA-Z0-9]/', "ThinkPHP5.0") ? '匹配成功<br />' : '匹配失败<br />';//匹配非打印字符(即不可见字符)echo preg_match('/[\f\n\r\t\v]/', "Think PHP5.0") ? '匹配成功<br />' : '匹配失败<br />';//匹配 ASP 或者 JSP,[]内的元素是平级关系,只要一个满足要求就匹配成功echo preg_match('/[AJ]SP/', "ASP,JSP,PHP") ? '匹配成功<br />' : '匹配失败<br />';//与上面相反,除了ASP或JSP外的字符串,如:PSP,符合条件,匹配成功echo preg_match('/[^AJ]SP/', "ASP,JSP,PSP") ? '匹配成功<br />' : '匹配失败<br />';
4-2. 元字符
元字符是修饰原子字符的,可以理解为原子的定语或限定条件
- 举个生活中的小例子:戴帽子的男生
- 其中【戴帽子的】就是【元字符】;
- 那个【男生】,就是【原子】。
- 注意二点:
- 元字符不允许单独使用,必须配合原子,共同工作;
- 如果原子中包括元字符,必须在元字符加
'\'
进行转义。
元字符种类(共15个)
元字符尽管看上去很多,其实不少是成对出现,不难记忆,别被吓住了~
{0,}
'/Go*gle/'
2+匹配1次或多次前面原子,等价于{1,}
'/Go+gle/'
3?匹配0次或1次前面原子,等价于{0,1}
'/Go?gle/'
4.匹配除换行符之外的任意一个字符'/Go.gle/'
5|匹配2个或多个分支/Google\|Baidu/
6{n}表示前面原子出现n次/Go{2}gle/
7{n,}表示前面原子出现不少于n次/Go{2,}gle/
8{n,m}表示前面原子至少出现n次,最多出现m次/Go{2,5}gle/
9^匹配字符串开始位置/^php/
10$匹配字符串开始位置/php$/
11\b匹配单词边界/\bphp/
12\B匹配除单词边界以外的部分/\Bphp/
13[ ]匹配方括号内指定的任意一个原子/[aj]sp/
14[^ ]匹配除方括号内指定原子以外的任意一个原子/[^aj]sp/
15( )匹配其整体为一个原子[模式单元],即多个原子组成的大原子/(Think)+PHP/
模式匹配优先级问题:
实例演示:
代码说明,都写在注释中了
<?php//*匹配前面0次,1次或多次前面原子echo preg_match('/Go*gle/', 'Ggle') ? '匹配成功<br />' : '匹配失败<br />';//?匹配0个或1个原子echo preg_match('/Go?gle/', 'Gogle') ? '匹配成功<br />' : '匹配失败<br />';//+匹配1个或多个原子echo preg_match('/Go+gle/', 'Google') ? '匹配成功<br />' : '匹配失败<br />';//.匹配G和g之间的任意一个字符echo preg_match('/G.g/', 'Gogle') ? '匹配成功<br />' : '匹配失败<br />';// | 匹配多个分支echo preg_match('/google|baidu/', 'baidu') ? '匹配成功<br />' : '匹配失败<br />';//^设置开头$设置结尾,精确匹配echo preg_match('/^google$/', 'google') ? '匹配成功<br />' : '匹配失败<br />';//{n} n表示前面原子出现的次数echo preg_match('/go{2}gle/', 'google') ? '匹配成功<br />' : '匹配失败<br />';//{n,} n表示前面原子至少要出现的次数,本例中,字符’o‘至少要出现2次echo preg_match('/go{2,}gle/', 'gooogle') ? '匹配成功<br />' : '匹配失败<br />';//{n,m} n表示前面原子至少要出现的次数,m表示最多出现次数,本例中,字符’o‘至少要出现2次,最多5次echo preg_match('/go{2,5}gle/', 'gooooogle') ? '匹配成功<br />' : '匹配失败<br />';// \b匹配单词边界,本例 ThinkPHP右边为边界不应再有内容echo preg_match('/PHP\b/', 'ThinkPHP 5.0') ? '匹配成功<br />' : '匹配失败<br />';// \B匹配除单词边界以外部分,本例 Think PHP右边不能有边界,左边必须要有边界echo preg_match('/\bPHP\B/', 'Think PHP5.0') ? '匹配成功<br />' : '匹配失败<br />';
4-3:模式修正符
修正符作用于整个正则表达式,要注意以下几点:
- 模式修正符要写在正则表达式定界符(右边'/')之外;
- 模式修正符调整正则表达式的解析,扩展正则表达式的功能和处理能力;
- 可以将多个模式修正符同时使用,以达到更好的控制功能。
常用模式修正符:
阅读全文
0 0
- PHP中正则表达式
- PHP中正则表达式
- php中正则表达式
- php中正则表达式
- php中使用正则表达式
- PHP中运用正则表达式
- PHP中常用正则表达式
- php中正则表达式详解
- php中正则表达式详解
- php中正则表达式详解
- php中正则表达式详解
- 如何在 PHP 中使用正则表达式
- PHP中一些正则表达式的应用
- 在PHP中使用正则表达式
- php中正则表达式使用详解
- 在PHP中使用正则表达式
- php中正则表达式的使用
- PHP中正则表达式学习及应用
- 三生万物:决策树
- VS2013中双在击*.ui打不开的解决方法
- 严蔚敏版数据结构学习笔记和代码实现
- Get list of widgets for QGuiApplication----stackoverflow
- 两个链式存储的一元多项式乘法运算算法
- php中正则表达式
- 经验:搞代码就行了,别乱动数据库(【测试数据要尽量写好一点,只改不删,后期不要轻易删表记录】。关联复杂。oracle报错难以解决)==教训经历如下:
- Android状态栏--实现状态栏全透明
- 判断一个二维数组里面是否含有一个整数
- C
- layui select动态添加option
- Maven之(七)pom.xml配置文件详解
- Callable实现带有返回值的线程
- 数据结构实验之二叉树五:层序遍历