正则表达式&字符串处理

正则表达式&字符串处理

程序原理:处理数据(Web上的数据)

数据:类型 字符串是程序中的一种最基本的类型 serialize

正则就是处理字符串的一种方式

 

处理字符串:查找、替换、删除、匹配、分割

   1、正则表达式简介

 

正则表达式介绍

正则表达式:Regular Expression,是用于描述字符排列模式的一种语法规则。

正则表达式是查找和替换、切割字符串模式的简洁和灵活的表示方法。

 

正则表达式的用途:

unix(linux)系统中,可以在编辑器中使用正则表达式实现对字符的搜索及处理;各种编程语言(c/c++,perl,java,javascript)也可以使用正则表达式实现对字符的模式分割、匹配、查找及替换操作。

正则表达式早期仅用于Unix系统程序,现在已被绝大多数系统、程序所支持。

 

PHP支持两种风格的正则表达式函数:一种是由PCREPerl Compatible Regular Expression)库提供的;另一种是由POSIXPortable Operation System Implementation for unix,UNIX可移植操作系统实现接口)扩展库提供的。前者使用以“preg_”为前缀命名的函数;后者使用以“ereg_”为前缀命名的函数。两者功能相似,只是执行效率略有差异。PERL库的函数(preg_)执行效率略高

ereg_*相关函数在php6中将不被支持(从PHP5.3.0开始已经删除),不推荐使用。

 

正则语法  记忆、理解

PHP函数

 

  2、正则表达式的语法规则

正则表达式描述了一种字符串的排列模式,主要用于字符串的模式分割、匹配、查找及替换等操作。正则表达式是主要由原子(普通字符,如单个英文字符、数字、特殊字符等)元字符(有特殊功用的字符)以及模式修正字符组成。一个正则表达式中至少包含一个原子。他们各自功能和含义有所不同,下面将分别讲述正则表达式的组成元素及其语法规则。

    $content = preg_split('/<div.+page-break-after.+div>/i',$content);原子:通常是最基本一个字符。

元字符:特殊字符,比如^,$

模式修正字符:i,m等。9.php

模式修正符
模式修正符是标记在整个模式之外的

i :
模式中的字符将同时匹配大小写字母
m :
字符串视为多行
s :
将字符串视为单行,换行符作为普通字符
x :
将模式中的空白忽略
A :
强制仅从目标字符串的开头开始匹配
D :
模式中的美元元字符仅匹配目标字符串的结尾
U :
匹配最近的字符串.

 


2.1普通转义字符

普通转义字符是一种原子。正则表达式所使用的普通转义字符见下表:

 

    

    

/d

匹配一个数字;等价于 [0-9]

/D

匹配除数字以外任何一个字符;等价于 [^0-9]  /d取反

/w

匹配一个英文字母、数字或下划线;等价于 [0-9a-zA-Z_]

/W

匹配除英文字母、数字和下划线以外任何一个字符;等价于 [^0-9a-zA-Z_]

/s

匹配一个空白字符;等价于 [ /f/n/r/t/v]包括空格。

/S

匹配除空白字符以外任何一个字符;等价于 [^ /f/n/r/t/v]

/f

匹配一个换页符;等价于 /x0c  /cL

/n

匹配一个换行符;等价于 /x0a  /cJ

/r

匹配一个回车符;等价于 /x0d  /cM

/t

匹配一个制表符;等价于 /x09  /cI

/v

匹配一个垂直制表符;等价于 /x0b  /cK

/oNN

匹配一个八进制数字

/xNN

匹配一个十六进制数字

/cC

匹配一个控制字符

参考1.php

 

2.2 字符类(字符集)和范围:

任何包含在方括号[]中的内容都是一个字符类——一个被匹配字符所属的字符集合。"[]"中存放一组原子,彼此地位平等,且仅匹配其中的一个原子

:

[abc]表示匹配abc中的一个

[a-z]表示所有az之间的字符中的一个

[A-Z]匹配所有大写字母中的一个

[a-zA-Z]表示任何的大小写字母中的一个

 [^a-z]匹配任何不在az之间的字符(^表示否)

[0-9]匹配所有的数字 /d

[0-9.-]匹配所有的数字,点号和减号

注意:

a.[]中的内容只表示一个字符。被匹配的文本中只要有[]中的任何一个字符,就匹配成功。

b.当把^放在方括号里面第一个位置时,表示否;如果^在方括号中的其他位置,表示是一个字符^。当^[]中的第一个位置时,如果要匹配它本身,要用/转义。当该符号用在方括号外面时,一般表示正则表达式的开始。

c.不在azAZ,09之间,单独出现时,表示是一个字符

d.[]中的特殊符号,不用转义。但是几个特殊字符除外:要转义,^在第一个位置要转义,反斜杠/要转义。三个反斜杠/代表一个/4个也代表一个反斜杠)。

 

参考2.php

var_dump(preg_match_all('/[^a^/]]/', '33]3anba',$t));  //a]

2.3 重复匹配

重复

表示这个模式可以被重复0次,1次或多次 a{0,}

表示这个模式可以被重复1次或多次 a{1,}

表示这个模式可以被重复0次或1 a{0,1}

 

计数

{5}    表示匹配5

{2,}   表示至少匹配2  

{0,5}  表示至多匹配5次(不能写成{,5})

{2,5}  表示最少匹配2次,最多匹配5

:,后面不能有空格

 

参考3.php

 

2.4 开始或结尾

(或/A)用于正则表达式的开始

(或/Z)用于正则表达式的结尾

例:

^andy      表示在字符串开始处是 andy

.cn$          表示在字符串结尾处是 .cn

^[a-z]$    表示只包含az之间一个字符的字符串。

参考 4.php

 

/B相当于/w ?

 

元字符“/b”对单词(/w)的边界进行匹配;“/B”对单词的内部进行匹配。

例如:在字符串“This island is a beautiful land”中使用//bis/b/可以匹配单词“is”,而与“This”或者“island”无关。//bis/与单词左边界匹配,可以匹配单词“is”和“island”中的“is”;//Bis/不与单词左边界匹配,可以匹配单词 “This”中的“is”。//Bis/B/ 将明确的指示不与单词的左、右边界匹配,只匹配单词的内部。所以在这个例子中没有匹配结果。

参考 5.php

 

2.5 元字符“.

元字符“.”匹配除换行符外任何一个字符,相当于[^/n]Unix系统)或[^/r/n]Windows系统)。不是html的换行<br />。例如:/pr.y/可以匹配目字符串“prey”、“pray”或“pr%y”等。

通常,可以使用.*”组合来匹配除换行符外的任何字符串。在一些书籍中也称其为“全匹配符”或“单含匹配符”。例如:/a.*z/ 表示可以匹配以字母“a”开头,字母“z”结束的任意不包括换行符的字符串。“. +”也可以完成类似的匹配功能,所不同的是其至少匹配一个字符。例如:/a.+z/将不匹配字符串“az”。

参考 6.php

 

2.6 选择符

元字符“|”又称模式选择符(或)。在正则表达式中匹配两个或更多的选择之一。例如:在字符串“There are many apples and pears.”中,/apple|pear/在第一次运行时匹配“apple”;再次运行时匹配“pear”。也可以继续增加选项,如/apple|pear|banana|lemon/

com|cn|net表示匹配comcnnet

参考7.php

 

2.7 子表达式(又称原子、模式单元或组)

元字符“()”将其中的正则表达式变为原子(或称模式单元)使用。与数学表达式中的括号类似,“()”可以作为一个单元被单独使用。

 

例如:/(Dog)+/匹配的“Dog”、“DogDog”、“DogDogDog”……,因为紧接着“+”前的原子是用元字符“()”括起来的字符串“Dog”。

 

参考7-2.php  7-3.php

 

2.8 匹配特殊字符

特殊字符有一般加/,如要匹配,则使用 /$

一些特殊字符:/ ^ $ . | ( ) * + ? { }  –

% , / * " ' | /s /t < > & ~

注意:在PHP中,一般将正则表达式模式包括在一个单引号字符串中。使用双

未经允许不得转载:淘淘源码吧 » 正则表达式&字符串处理