正则表达式简介 原创
概念:
正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。
作用:
1.匹配,也常常用于从字符串中析取信息。
2.用新文本代替匹配文本。
3.将一个字符串拆分为一组更小的信息块。
说明:
如果可以使用字符串处理函数处理的任务,就不用使用正则。有一些复杂的操作,只能使用正则完成。
正则表达式也称可以在很多计算机语言中的应用。正则表达式也称为一种模式表达式。正则表达式就是
通过构件特定的规则模式与输入的字符信息比较。再进行分割匹配、查找、分割、替换等工作。
学习正则表达式时,有两方面需要学习:
一、正则表达式的模式如何编写
二、学习正则表达式的强大处理函数
正则表达式的语法规则
语法规则概述
特点:
一、正则表达式是一个字符串
二、由具有特殊意义的字符组成的字符串
三、具有一点编写规则也是一种模式
四、看作是一种编程语言(是用一些特殊字符按规则编写出一个字符串形成一种模式--正则表达式)
注意:如果正则表达式不和函数一起使用,则它就是一个字符串,如果将正则表达式放在到某个函
数中使用,才能发挥出正则表达式的作用。
用到分割函数中,就可以用这个正则去分割字符串。
用到替换函数中,就可以用这个正则去替换字符串。
。。。。。。
“/\
/”
定界符
说明:
除了字母、数字和反斜线“\”以外的任何字符都可以为定界符
||
// 默认
{}
!!
注意:没有特殊需要我们都使用正斜线作为正则表达式的定界符号
原子
概念:原子是正则表达式的最基本组成单位,而且必须至少要包含一个原子。只要
一个正则表达式可以单独使用的字符,就是原子
1.所有打印和非打印机字符
打印(可以在键盘上输出的字符A-Z a-z 0-9非打印字符(回车、空格、无法在屏幕上输出的)
2. . * + ? <> 如果所有有意义的字符想作为原子使用,统统使用“\”转义字符转义这些有意义的字符,可以
将有意义的字符转成没有意义的字符,这个可以将没有意义的字符转为有意的。
3. 在正则表达式中可以直接使用一些代表范围的原子:
\d:表示任意一个十进制的数字 [0-9]
\D:表示任意一个除数字之外的字符[^0-9]
\s:表示任意一个空白符 [\n\t\f\r] 空格 回车 Tab键
\S:表示任意一个非空白符 [\n\t\f\r] 空格 回车 Tab键。
\w:表示任意一个字a-zA-Z0-9_ [A-Za-z0-9_]
\W:表示任意一个非字除a-zA-Z0-9_ [^A-Za-z0-9_]
4.自己定义一个原子表,使用[]可以匹配括号中的任何一个原子。
[abc567] 匹配 a或b或c或5或6或7
[a-f] [3-5] [-]表示一段范围。a到f 3到5 包括 a f 3 5
[^a-g] [^]取反就是除了原子表中的原子。
正则表达式中常用的非打印字符:
\cx
匹配由x指明的控制字符。如\cM匹配一个Control-M或回车符。x的值必须为A~Z或a~z之一。
\f
匹配一个换页符。等价于 \x0c或\cL
\n
匹配一个换行符。等价于 \x0a或\cJ
\r
匹配一个回车符。等价于 \x0d或\cM
\t
匹配一个制表符。等价于 \x09或\cI
\v
匹配一个垂直制表符。等价于 \x0b或\cK
元字符
概念:元字符是一种特殊的字符,是用来修饰原子用的,不可以单独出现。
* :表示其前的原子可以出现0次、1次或多次(任意次)。 {0,}
+ : 表示其前的原子可以出现1次、或多次。 {1,}
? : 表示其前的原子可以出现0次、或1次。 {0,1}
. : 默认情况下除换行符外任意一个字符。
| : 表示或者的关系 cat|dog com|cn 优先级最低,优先匹配 cat或dog com或cn
\b : 表示一个边界 \bis\b This is island is 边界:空格和字符串行首行尾。
\B : 表示一个非边界 \Bis\b This is island This 的 is 非空格。
{ } 详解:
{m} m表示一个整数,{5}表示前面的原子出现5次。
{m,n} m和n表示一个整数,m要少于n 表示前面的原子最少m次,最多n次。
{m,} 表示前面的原子最少出现m次,最多不限。
^ :只能在一个正则表达式的第一个字符出现,则表达式必须以这个正则表达式开始 ^one
$ : 只能在一个正则表达式的最后一个字符出现,则表达式必须以这个正则表达式结尾 one$
( ) 详解:
一、作为大原子子使用 (ftp)+
二、改变优先级 ca(t|d)og
三、作为子模式使用,正则表达式不光对一个字符匹配一次
四、可以取消子模式就( )作为大原子和优先级使用(?: )在括号中原子的前面使用 ?:取消子模式
五、反向引用可以在模式中直接将子模式取出在作为正则表达式一部分,如果是在正则表达式像
替换函数preg_replace 函数中可以将子模式取出,在替换字符串使用
单引号中 \1 \2 \.. 双引号中 \\1 \\2 \\..
其他位置使用使用子模式可用 ${1} ${2} ${..} 不能在正则表达式中用。
注意:是单引号和双引号括起来的正则;
优先级:由高到低
1
\
转义字符
2
() (?:) (?=) []
模式单元和原子表
3
* + ? {n} {n,} {n,m}
重复匹配
4
^ $ \b \B \A \Z
边界限制
5
|
模式选择
模式修正符
概念:是对原子和元字符功能上的扩展和补充。
“/ /模式修正符”
1.就是几个字母而已
2.可用一次使用一个 每个具有一定的意义,也可以使用多个
3.是对整个正则表达式调优使用也可以说是对正则表达式功能的扩展
常用模式修正符号:
i :表示在此模式下匹配不区分大小写
m :默认情况将字符串视为一行,加m 会识别字符串中的回车换行 及识别多行 那么每行都可以存在^ $ 这样的开头和结尾匹配元字符修饰
s :如果没有使用这个模式修正符号时元字符中"."默认不表示换行符号,而是表示任意一个字符。
x :模式中的空白忽略
A :必须以什么开头
Z :必须以什么结尾
U :正则表达式特点就是”贪婪“ .* .+ 都会引发贪婪
一、使用模式修正符 U 来关闭贪婪
二、使用?取消贪婪模式 .*? .+?
三、一和二同时使用还是会开启贪婪。
与Perl兼容的正则表达式函数
说明:在PHP中给我们提供两套正则表达式函数库:
POSIX 扩展正则表达式函数(ereg_)
Perl 兼容正则表达式函数(preg_)
这个两个函数库功能一样,找个处理效率高的
注意:推荐使用Perl兼容正则表达式函数库(只学这个)
字符串的匹配和查找
字符串的替换
字符串的分割和连接
实例:文章发布操作示例