PHP正则表达式基本语法
本章主要学习正则表达式的基本语法;
正则表达式就是一个匹配的模式,正则表达式本身也就是一个字符串(有一些语法规则,特殊符号组成)
正则表达式这个字符串一定要在对应的函数中使用才有意义(分割,替换函数结合使用)
1、定界符 / /
2、原子 最小的一个匹配单元(放在 / / 中,在正则表达式中,至少有一个。例如:$reg = '/ 7 /' )
3、元字符 元字符是不能单独使用的,用来修饰元子的,用来扩展原子功能和限字的做补充说明(协助定界符中 例如:$reg = '/{5}/' )
4、模式修正符 修正,对模式(正则)修正(写在定界符的外面,写在右边 例如: $reg = '/ {5} / i ' 中的i)
一、界定符号
界定符就表示一个正则表达式的开始和结束
例如:/[0-9]/ | #[0-9]# | {[0-9]} 常用写法建议使用斜杠;// $pattern = '/[0-9]/'
二、原子
可见原子:
1、标点符号; ‘’ _ ? . 等等
2、英文字母数字 a-z, A-Z, 0-9
3、汉语,日文,阿拉伯文等其他文字
4、数理化公司符号
5、其他可见字符
不可见原子:
1、换行符 \n
2、回车 \r
3、制表符 \t
4、空格
5、其他看不见的符号
(所有的数字,所有的字,所有的空白,所有的字母,特殊符号 如下)
. 匹配除换行符之外的任意字符
\d (所有的数字) 代表任意一个数字 [ 0-9 ]
\D (代表所有非数字) 代表任何一个非数字 [ ^0-9 ]
\w 代表任意一个字,a-z A-Z, 0-9 _ [ a-zA-Z0-9_]
\W 代表任意一个非字,a-z A-Z 0-9 _ 之外的所有字符 [ ^ a-zA-Z0-9_ ]
\s 代表空白 [ \t \n \f \v ]
\S 代表任意一个非空白 [^ \t \n \f \v ]
自定义原子表
[ 13579 ]
[ a-zA-Z] 说明:- 是从哪到哪
[ ^a-zA-Z ] 说明: ^ 是除了什么
说明:( . ) 点, 能代表所有的一个原子
三、元字符
元字符这个不能在正则表达式中单独使用,用来修饰原子的
元字符 即原子的筛选方式
* 用来修饰前面的原子可以出现 0 个 1 个 或者 多个
+ 用来修饰前面的原子出现的次数 1 次 或 多次 (不能没有一次)
?用来修饰前面的原子出现的次数 0 次 或 1次
{ m } 用来修饰前面的原子出现 m 次,多一次少一次都不行
{ n, m } 用来修饰前面的原子出现的个数,在 n 到 m 之间,包含 n, m
{ n, } 用来修饰前面的原子可以出现至少 n 次,包含 n
| 或的关系,表示它两边的原子,只有有一个出现就可以,但是 | 的优先级最低
^ 和 \A 表示必须以什么开始,必须写在正则表达式的前面
$ 和 \Z 表示必须以什么结束,必须写在正则表达式的后面
\b 单词边界
\B 非单词边界
()第一个作用:改变优先级别
$str = ' orisaabc';
$reg = '/ or(is|a)abc/';
第二个作用:将小原子变成大原子
$str = 'sqlsalabcsqlddfd';
$reg = '/(sql)*/';
第三个作用:子模式,整个表达式是一个大模式,小括号中的是每一个独立的子模式
第四个作用:反向引用
?: 取消子模式,作为大模式用(?:\d{4})
\1 取子模式
四、模式修正符
模式修正符要放在定界符之外,放在右边,模式修正符一个字符就是一个功能,可以组合使用;
例如: “/ go*gle/ i ”; "/go*gle/ ieu";
作用:
模式修正符号可以修正正则表达式的解释,或者扩充正则表达式的功能;
i 不区分大小写(默认是区分大小写)
m 修正符号修正正则表达式可以视为多行,在使用 ^ 或 $ 时每一行满足都可以(默认为一行)
s 用来修正正则表达式中的换行符号,是包含换行符,不用 s 则不包含换行符,默认不包含换行符
x 忽略修正正则表达式可以省略多个单词之间的空白
U (.* , .+) 正则表达式比较贪婪,.*? 和 .+?可以取消贪婪
贪婪的案例:
$pattern = '/myistest.+123/';
$subject = 'you look myistest__123123123123';
$matche = [];
preg_match($pattern, $subject, $matche);
show($matche);
贪婪的结果:
Array
(
[0] => myistest__123123123123
)
取消贪婪的大U:
$pattern = '/myistest.+123/U';
$subject = 'you look myistest__123123123123';
$matche = [];
preg_match($pattern, $subject, $matche);
show($matche);
取消贪婪的结果:
Array
(
[0] => myistest__123
)
忽略大小写的案例:i 的用法
$pattern = '/myisTest.+123/Ui';
$subject = 'you look myistest__123123123123';
$matche = [];
preg_match($pattern, $subject, $matche);
show($matche);
输出结果同上;不加 i 是匹配不到结果的;
忽略空白符的案例: x 的使用
$pattern = '/m yi s Test.+123/Uix';
$subject = 'you look myistest__123123123123';
$matche = [];
preg_match($pattern, $subject, $matche);
show($matche);
输出结果同上,不加 x 是匹配不到结果的;
五、实战应用
1、非空匹配 ‘/.+/’
2、浮点数匹配(保留2位)‘/(?!0\.00)(\d+\.\d{2}$)/’
$subject = ['1.00', '2.345', '0.23', '234', '23.22', '0.00'];
$matche = [];
for ($i = 0; $i < count($subject); $i++){
if(preg_match('/(?!0\.00)(\d+\.\d{2}$)/', $subject[$i], $matche)){
show($matche);
}
}
结果:
Array
(
[0] => 1.00
[1] => 1.00
)
Array
(
[0] => 0.23
[1] => 0.23
)
Array
(
[0] => 23.22
[1] => 23.22
)
3、手机号码 ‘/^1(3|4|7|8)\d{9}$/’
4、Email地址 ‘/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i’ 或者 ‘/^\w+(\.\w+)*@\w+(\.\w+)+$/’
5、常见URL地址 '/^(https?://)?(\w\.)+[a-zA-Z]+$/'
注:学习笔记
PHP正则表达式基本语法的更多相关文章
- Java正则表达式的语法与示例
Java正则表达式的语法与示例 java 正则表达式 正则表达式语法 java正则表达式语法 java正则表达式 概要: Java正则表达式的语法与示例 | |目录 1匹配验证-验证Email是否正确 ...
- 前端学PHP之正则表达式基础语法
前面的话 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本 ...
- (转)Java正则表达式的语法与示例
转自:http://www.cnblogs.com/lzq198754/p/5780340.html 概要: Java正则表达式的语法与示例 | |目录 1匹配验证-验证Email是否正确 2在字符串 ...
- JS 正则表达式基本语法(精粹)
1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束. 例子如下: "^The":表示所有以"The"开始的字符串( ...
- js正则表达式基本语法
正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束. 例子如下: "^The":表示所有以"The"开始的字符串(&q ...
- JavaScript正则表达式之语法
Regular Expressions翻译成中文叫正则表达式.也不知道是谁翻译过来的,听起来就很严肃.似乎翻译成通用表达式更能传达其精髓. 为什么叫通用表达式?因为它有一套和编程语言无关的文本匹配规则 ...
- 学习django之正则表达式的语法
正则表达式 正则表达式的常用语法: 1)单个字符: . 任意的一个字符 a|b 字符a或字符b [afg] a或者f或者g的一个字符 [0-4] 0 ...
- JavaScript学习笔记-正则表达式(语法篇)
正则表达式的模式规则是由一个字符系列组成的,包括所有字母和数字在内;大多数的字符(所有字母和数字)都是按字符的直接量来描述带匹配的字符;一些具有特殊语义的字符按照其特殊语义来进行匹配,有些字符需要通过 ...
- JavaScript 正则表达式基础语法
前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...
随机推荐
- Metasploit漏洞利用,三个入侵主机实战案例
受害者主机 windows2003 ie模拟工具ietest ie5.5/6/7/ 漏洞:MS10_002,MS10_018,MS12-020 ---------------------------- ...
- IE10不能显示JSON文件内容
IE7,8,9下Ajax返回后,再执行跳转,会弹出阻止提示框. 所以我采用WebForm 提交思想: //导出 jv.postOpen = jv.PostOpen = jv.Export = func ...
- zabbix第一篇:zabbix安装及使用
常用软件安装及使用目录 一:搭建zabbix命令集 cat /etc/redhat-release uname -r getenforce systemctl status firewalld.ser ...
- 20172321 2017-2018-2《Java程序设计》第三周学习总结
20172321 2017-2018-2<Java程序设计>第三周学习总结 教材学习内容总结 第三章要点: 要点1 :String类.Random类.Math类和枚举型,这几个是很有用的并 ...
- Python写一个根据日期计算是星期几的模块
import datetimedef get_week_day(date): week_day = { 0: '星期一', 1: '星期二', 2: '星期三', 3: '星期四', 4: '星期五' ...
- Task 5.1 电梯调度程序需求调研报告
1.任务概述: 1.1任务背景:试想一下,石家庄铁道大学基础教学楼的电梯配置如下:大厦有18层, 4部电梯,很多乘客使用这些电梯的日常(旅客重量:平均70公斤最大120公斤,最小45公斤).其他常量数 ...
- C#简单窗体应用程序(一)
使用C#创建控制台应用程序的基本步骤: (1)创建项目: (2)用户界面设计: (3)属性设置: (4)编写程序代码: (5)保存.调试.运行: 例题:创建一个Windows窗体应用程序,在窗体中添加 ...
- CANOpen学习指南
对于初学者,相对于其他总线的资料来说,在国内CANOpen的资料并不多.而且并不是所有资料都适合初学者看的.这里给出一些建议,对CANOpen感兴趣的,可以参考一下学习的顺序. 前提:需要对CAN总线 ...
- python下的Box2d物理引擎的配置
/******************************* I come back! 由于已经大四了,正在找工作 导致了至今以来第二长的时间内没有更新博客.向大家表示道歉 *********** ...
- matlab的应用
MATLAB在信号与系统中的应用 一: 看到MATLAB在信号与系统中的应用,对这部分我比较熟悉,在此举一个小例子. impulse(sys)表示求连续系统sys的冲击响应 subplot ...