PHP中的正则表达式的使用
PHP中的正则表达式基础知识
1.正则表达式就是描述字符串排列模式的一种自定义语法规则
2.如果可以使用字符串处理函数完成的任务,就不使用正则表达式
3.有一些复杂的操作,只能使用正则表达式完成
4.正则表达式也称为一种模式表达式
5.正则表达式就是通过构建具有特定规则的模式,与输入的字符信息比较,在进行分割、匹配、查找、替换等工作
例:"/\<img\s*src=\".*?\"\/\>/"
a.正则表达式也是一个字符串
b.由具有特殊意义的字符串组成的字符串
c.具有一定编写规则,也是一种模式
d.看作是一种编程语言(是用一些特殊字符,按规则编写出一个字符串,形成一种模式---正则表达式)
注意:如果正则表达式,不和函数一起使用,则它就是一个字符串,只有将正则表达式放到某个函数中使用,才能发挥出正则表达式的作用。
在PHP中给我们提供两套正则表达式函数库
POSIX扩展正则表达式函数库
Perl兼容正则表达式函数库
这两个函数功能一样,找一个处理字符串效率高的
注意:由于功能一样,所以推荐使用Perl兼容正则表达式函数库
正则表达式的模式如何编写
例:"/\<img\s*src=\".*?\"\/\>/iU"
语法:
1.定界符 //
除了字母、数字和正斜线\以外的任一字符都可以是定界符
| |
/ /
{ }
! !
我们一般使用//
2.原子。 img \s .
注意:原子是正则表达式的最基本组成单位,而且必须至少要包含一个原子
只要一个正则表达式可以单独使用的字符,就是原子
1.所有打印(所有可以用键盘在屏幕上输出的字符串)和非打印字符(看不到的)
2.* + ? ( . < 如果所有有意义的字符,想要作为原子使用,统统使用“\”转义字符转义
在无特殊意义的字符前使用转义字符时还是把它看成普通字符来看
转义字符可以将有意义的字符转成没意义的字符,还可以将没意义的字符转成有意义的字符
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.自己定义一个原子表[],可以匹配方括号中的任何一个原子
例:[0-5p-z]
3.元字符 * ?
元字符是一种特殊的字符,是用来修饰原子用的,不可以单独使用
* :表示其前面原子可以出现的次数 0次、1次、或多次 {0,}
+ :表示其前面的原子出现1次或多次,不能没有至少一次 {1,}
? :表示其前面的原子出现0次或1次,有只能一次,要么没有 {0,1}
{} :用于自己定义前面的原子出现的次数
{m} m表示一个整数, {5}表示前面的原子出现5次
{m,n} m和n表示整数,{2,5}表示前面的原子出现2-5次
{m,} 表示前面的原子至少出现m次
. :默认情况下,表示除换行符外的任意一字符
^ :直接在一个正则表达式的第一个字符出现,则表示字符串必须以这个正则表达式开始
$ :直接在一个正则表达式的最后字符出现,则表示字符串必须以这个正则表达式结尾
| :表示或的关系,它的优先级是最低的,最后考虑它
\b :表示一个边界
\B :表示一个非边界
重点 () :
1.()作用:是作为大原子使用
2.改变优先级
3.作为子模式使用,正则表达式不光对一个字符串匹配一次,全部匹配作为一个大模式,放在数组的第一个元素中,每个()是一个子模式按顺序放到数组的其他元素中去
4.可以取消子模式,就将()作为大原子或改变优先级使用,在大括号中最前面使用?:就可以取消这个()表示的子模式
5.反向引用,可以在模式中直接将子模式取出来,再作为正则表达式模式的一部分,如果是在正则表达式像替换函数preg_replace函数中,可以将子模式取出,在被替换的字符串中使用
\1取第一个子模式 \2取第二个子模式。。。。。
<?php
$pattren="/((?:\d{4})\W\d{2}\W\d{2})\s+((\d{2})\W\d{2}\W\d{2})\s+(am|pm)/";
$string="today is 2016-08-09 15:30:00 pm...";
if(preg_match($pattren,$string,$arr)){
echo "正则表达式<b>{$pattren}<b>和字符串<b>{$string}<b>匹配成功<br>";
echo '<pre>';
print_r($arr);
echo '</pre>';
}else{
echo "<font color='red'>正则表达式{$pattren}和字符串{$string}匹配失败</font>";
}
?>
4.模式修正符号 i u
"//模式修正符号"
1.可以一次使用一个,每一个都具有一定的意义,也可以连续使用多个
2.是对整个正则表达式的调优使用,也可以说是对正则表达式功能的扩展
例;"/abc/" 只能匹配小写字母 abc
"/abc/i" 可以不区分大小写的匹配
i :表示在和模式进行匹配时不区分大小写
m :默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)
当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果
s :如果没有使用这个模式修正符时,元字符中的“.”就不能匹配换行符,使用后就可以了。
x :表示模式中的空白忽略不计
e : 如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。
A :如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。此效果也可以通过适当的模式本身来实现
Z :
U :本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符或者在数量符之后跟一个问号(如 .*?)来启用此选项。
/原子核元字符/模式修正符号 /为定界符
PHP中的正则表达式的使用的更多相关文章
- PHP中有关正则表达式的函数集锦
之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有 ...
- JavaScript中的正则表达式(终结篇)
JavaScript中的正则表达式(终结篇) 在之前的几篇文章中,我们了解了正则表达式的基本语法,但那些语法不是针对于某一个特定语言的.这篇博文我们将通过下面几个部分来了解正则表达式在JavaScri ...
- Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Thursday, January 29, 2015 补上第四周笔记,以及本次课程总结. 第四周 ...
- 9.JAVA中的正则表达式
一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ? #{0,1}-?有一个-或者没有 \\ #表示一个" ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- 工作随笔——UIButton的EdgeInsets + Swift中的正则表达式;
1.UIButton的EdgeInsets UIButton的EdgeInsets方法,是用来设置title和image对于上左下右四个方向的偏移,但是很奇怪的是,刚开始只有Image,titile也 ...
- Javascript中的正则表达式
Javascript中的正则表达式 刚开始接触正则表达式的时候,觉得这是个很死板的东西(没办法,计算机不能像人眼一样能很快的辨认出我们需要的结果,它需要一定的规则来对它进行限制),了解的越多,发现这个 ...
- 在Visual Studio中使用正则表达式匹配换行和批量替换
系统环境:Windows 8.1 Enterprise Update 2 x64 开发环境:Mircosoft Visual Studio Ultimate 2013 Update 2 RC 问题:如 ...
- 浅谈JavaScript中的正则表达式
引言 对于正则表达式我想作为程序员肯定使用过它,那天书般的表达方式,我用一次就记住它了.这篇博客先介绍一些正则表达式的内容,然后介绍JavaScript中对正则表达式特有的改进.下面开始介绍正则表达式 ...
- 任督二脉之Shell中的正则表达式
VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...
随机推荐
- $('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法
$('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法 <input type='checkbox' id='cb'/> ...
- IOS开发设计思路
我在做 iOS 开发的时候,发现自己在写程序的时候,常常处于两种状态的切换,我把这两种状态称为软件开发的上帝模式与农民模式.我先给大家介绍一下这两种模式的特点. 上帝模式 处于上帝模式时,我需要构思整 ...
- spring使用jackson返回object报错:Handler execution resulted in exception: Could not find acceptable representation
问题:在springmvc中添加Jackson jar包返回Object类型,处理器方法的produces属性不写,默认根据类型,但如果指定了(错误原因)produces = "text/h ...
- while, do-while ,switch···case语句的学习与运用
1.while语句:当···的时候 格式:初始条件 while(循环条件) { 循环体; 状态改变; } 相当于 ...
- 实例化Layout中的布局文件(xml)
什么是LayoutInflater This class is used to instantiate layout XML file into its corresponding View obje ...
- [转]POJO中使用ThreadLocal实现Java嵌套事务
大多嵌套事务都是通过EJB实现的,现在我们尝试实现对POJO的嵌套事务.这里我们使用了ThreadLocal的功能. 理解嵌套事务 事务是可以嵌套的.所以内层事务或外层事务可以在不影响其他事务的条件下 ...
- iOS不显示状态栏(电池和信号栏)
//隐藏状态栏 - (BOOL)prefersStatusBarHidden { return YES; } 在viewcontroller里面加入
- Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- 一模 (5) day2
第一题: 题目大意:使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? n<=2*10^9 解题过程: 1.以前看到过这题了,一个数x的位数=(int)lg(x)+1 换一下底就是 ...
- Redis系列-存储篇list主要操作函数小结
在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素:列表最左端第一个元素. 表尾元素:列表最右端的 ...