PHP 正则表达式自编.docx

上传人:b****5 文档编号:7731396 上传时间:2023-01-26 格式:DOCX 页数:10 大小:81.13KB
下载 相关 举报
PHP 正则表达式自编.docx_第1页
第1页 / 共10页
PHP 正则表达式自编.docx_第2页
第2页 / 共10页
PHP 正则表达式自编.docx_第3页
第3页 / 共10页
PHP 正则表达式自编.docx_第4页
第4页 / 共10页
PHP 正则表达式自编.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

PHP 正则表达式自编.docx

《PHP 正则表达式自编.docx》由会员分享,可在线阅读,更多相关《PHP 正则表达式自编.docx(10页珍藏版)》请在冰豆网上搜索。

PHP 正则表达式自编.docx

PHP正则表达式自编

PHP中的正则表达式

正则表达式就是用来匹配、替换、想要的字符,在PHP中采用了两种风格的“正则表达式”POSIX和Perl两种。

POSIX正则表达式是UnLx,linux中所采用正则表达式。

Perl是对POSIX进行了扩展,Perl要优于POSIX

 

POSIX正则表达式:

POSIX正则表达式中支持3种方法:

中括号、量词、预定义字符

1、[]中括号作用:

中括号的作用是选取一个字符范围。

其中以“-”指定连续字符。

“,”逗号用来指定间断字符。

如:

[0-9]任何0~9的十进制数字

[a-z]任何a~z的字母

[A-Za-z]任何从大写A至小写z字符。

2、量词:

指定匹配的“字符”出现的“位置、数量”等。

$

匹配输入字符串的结尾位置。

如果设置了RegExp对象的Multiline属性,则$也匹配'\n'或'\r'。

要匹配$字符本身,请使用\$。

()

标记一个子表达式的开始和结束位置。

子表达式可以获取供以后使用。

要匹配这些字符,请使用\(和\)。

[]

标记一个中括号表达式的开始。

要匹配[,请使用\[。

{}

标记限定符表达式的开始。

要匹配{,请使用\{。

 

*

匹配前面的子表达式零次或多次。

要匹配*字符,请使用\*。

+

匹配前面的子表达式一次或多次。

要匹配+字符,请使用\+。

.

匹配除换行符\n之外的任何单字符。

要匹配.,请使用\。

?

匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。

要匹配?

字符,请使用\?

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。

例如,'n'匹配字符'n'。

'\n'匹配换行符。

序列'\\'匹配"\",而'\('则匹配"("。

^

匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。

要匹配^字符本身,请使用\^。

|

指明两项之间的一个选择。

要匹配|,请使用\|。

预定义字符

  [[:

alpha:

]]任何大小写字母,相当于Perl中的[A-Za-z]

  [[:

digit:

]]任何数字,相当于Perl中的[0-9]

  [[:

alnum:

]]任何大小写字母和数字,相当于Perl中的[A-Za-z0-9]

  [[:

space:

]]任何白字符,空格、换行、制表符、换页、回车

  [[:

upper:

]]任何大写字母,相当于Perl中的[A-Z]

  [[:

lower:

]]任何小写字母,相当于Perl中的[a-z]

  [[:

punct:

]]任何标点符号

[[:

graph:

]]从ASCII33-126范围内的可打印字符。

SOPIX正则独有的

[[:

cntrl:

]]控制字符,如制表符,退格符或反斜线。

SOPIX正则独有的

  [[:

xdigit:

]]任何16进制的数字,相当于Perl中的[0-9a-fA-F]

 

PHP中支持的POSIX风格函数有7个:

booleanereg(stringval,stringval2,[arrayregs])

ereg使用POSIX正则val中的值,以区分大小定的方式搜索val2中的值,再按正则表达式中圆括号()中的字表达式分别进行填充regs数组,如果有一个匹配就返回True。

如:

结果:

查到了

查到的内容是:

――――――――――――――――――――――――――――――――――

eregi()以不区分大小定的方式搜索,其它与ereg()相同

如:

结果显示:

没有查到

――――――――――――――――――――――――――――――――――

stringereg_replace(stringpattern,stringreplacement,stringstring)

以区分大小写的方式替换文本,pattern为要查的“正则表达式”,replacement为要怎样替换的“正则表达式”,string为“被查找文本”,最后再返回一个“替换结果”string值。

注意:

匹配的值也和ereg()方法一样分段,但这里使用\0

\1,\2……来分别引用,而不是数组索引。

如下:

显示结果:

baidu

url地址为:

baidu

―――――――――――――――――――――――――――――――――-

eregi_replace()

其使用和ereg_replace()方法一样,只是采用“不区分大小写的方式替换文本”

―――――――――――――――――――――――――――――――――

split(stringpattern,stringstring,intlmit)

split()是“以区分大小写的形式”通过“正则表达式(pattern)”查找字符文本(string),充当被查找文本中的分割符,将文本进行分割。

可以指定分割个数(lmit),进行分割。

如:

显示结果:

Array([0]=>www[1]=>)

――――――――――――――――――――――――――――――――――

spliti()

spliti()是“以不区分大小写的形式”通过“正则表达式(pattern)”查找字符文本(string),充当被查找文本中的分割符,将文本进行分割。

可以指定分割个数(lmit),进行分割。

――――――――――――――――――――――――――――――――――

sql_regcase()

字符文本中只要出现字母,函数将该字母转换成“正则表达式的大小写界限”。

如果PHP应用要与其它应用协作,而这些应用只支持区分大小写的正则表达式,可以使用这个函数作为工作区。

如:

显示结果:

[Ww][Ww][Ww].[Bb][Aa][Ii][Dd][Uu].[Cc][Oo][Mm]

―――――――――――――――――――――――――――――――――――――――

Perl正则表达式

Perl正则表达式,继承了POSIX正则表达式的上述语法,即:

中括号、量词、预定义字符,同时也添加了它独有的操作语法

修饰符、元字符。

Perl采用/[正则表达式]/的形式进行书写的。

修饰符:

通常,你可能希望调整正则表达式解释:

例如,可能希望告诉正则表达式完成不区分大小写的搜索,或忽略语法中注释。

这些调整称为“修饰符(modifier)”,修饰符对编写简洁短小的表达式大有帮助。

表9-1列出了一此需要特别注意的修饰符:

i

完成不区分大小写的搜索

g

查找所有出现(alloccurrences完成全局搜索)

m

将一个字符串为多行(m就表示(mulitiple))。

默认情况下,^和$字符匹配字符串的最开始和最末尾。

使用m修饰符将使^和$匹配字符串中每行的开始。

s

将一个字符串视为一行,忽略其中的所有换行符;它与m修饰符正好相反

x

忽略正则表达式中的空白和注释

u

第一次匹配后停止。

许多量词很“贪婪”,将尽可通地完成匹配,而不是在第一次匹配后停止。

利用这个修饰,可以让它们“不再贪婪”

如:

/wmd/i:

可以匹配WMD、wMD、WMd、wmd以及字符串wnd的任何其它大小写形式。

/taxation/gi:

由于不区分大小写,所以会找到单词“taxation”所有出现。

可以使用这个全局修饰符出现的总次数,或者结合替换特性用某个字符串替代模式的所有出现。

元字符

利用Perl正则表达式还可以做另一件有用的事情,这就是使用各种元字符来搜索匹配。

元字符(metacharacter)就是一个前面有反斜线的字母字符,表示某种特殊含义。

以下是一组有用的元字符。

 

\b匹配一个单词边界,也就是指单词和空格间的位置。

例如,'er\b'可以匹配"never"中的'er',但不能匹配"verb"中的'er'。

\B匹配非单词边界。

'er\B'能匹配"verb"中的'er',但不能匹配"never"中的'er'。

\cx匹配由x指明的控制字符。

例如,\cM匹配一个Control-M或回车符。

x的值必须为A-Z或a-z之一。

否则,将c视为一个原义的'c'字符。

\d匹配一个数字字符。

等价于[0-9]。

\D匹配一个非数字字符。

等价于[^0-9]。

\f匹配一个换页符。

等价于\x0c和\cL。

\n匹配一个换行符。

等价于\x0a和\cJ。

\r匹配一个回车符。

等价于\x0d和\cM。

\s匹配任何空白字符,包括空格、制表符、换页符等等。

等价于[\f\n\r\t\v]。

\S匹配任何非空白字符。

等价于[^\f\n\r\t\v]。

\t匹配一个制表符。

等价于\x09和\cI。

\v匹配一个垂直制表符。

等价于\x0b和\cK。

\w匹配包括下划线的任何单词字符。

等价于'[A-Za-z0-9_]'。

\W匹配任何非单词字符。

等价于'[^A-Za-z0-9_]'。

\xn匹配n,其中n为十六进制转义值。

十六进制转义值必须为确定的两个数字长。

例如,'\x41'匹配"A"。

'\x041'则等价于'\x04'&"1"。

正则表达式中可以使用ASCII编码。

.

\num匹配num,其中num是一个正整数。

对所获取的匹配的引用。

例如,'(.)\1'匹配两个连续的相同字符。

\n标识一个八进制转义值或一个向后引用。

如果\n之前至少n个获取的子表达式,则n为向后引用。

否则,如果n为八进制数字(0-7),则n为一个八进制转义值。

\nm标识一个八进制转义值或一个向后引用。

如果\nm之前至少有nm个获得子表达式,则nm为向后引用。

如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。

如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。

\nml如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。

\un匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。

例如,\u00A9匹配版权符号(?

)。

PHP中的Perl函数

PHP中的perl拥有7个函数,和POSIX一样,但功能有差异。

包括:

preg_grep()搜索数组中的所有元素,反回由与某个模式匹配的所有元素组成的数组。

其形式为:

arraypreg_grep(stringpattern,arrayinput[,flags])

preg_grep()函数搜索数组中的所有元素,返回由与某个模式匹配的所有元素组成的数组。

Pattern是所编写的“正则表达式”,array是要搜索的“数组”,flag是一个可选参数,他接受一个PREG_REGP_IVNERT。

传递的标志将得到与该模式不匹配的数组元素。

实例:

显示结果:

Array([2]=>tow[3]=>three)

注意:

显示结果中的索引是[2]和[3]这和数组$arrNumber中的位置是对应的,它的数组大小也只有2

――――――――――――――――――――――――――――――――――

booleanpreg_match()(stringpattern,stringstring[,arraymatches])

preg_match()函数在字符串中搜索模式,如果存在则返回TRUE,否则返回FALS。

Pattern为“正则表达式”,string是被搜索的文本,matches为匹配的存储的数组。

如:

结果:

Array([0]=>evercreated!

[1]=>eve[2]=>created!

------------------------------------------------------------------------------------------------------

intpreg_match_all(stringpattern,stringstring,arraypattern_array,intorder)

preg_match_all()函数在字符串中匹配模式的所有出现,以便通过可选的输入参数order所指定的顺序,将每次出现放在某个数组中。

如:

结果:

8:

09,9:

407:

30

――――――――――――――――――――――――――――――――――――――――

stringpreg_quote(stringstr[,stringdelimiter])

函数preg_quote()在每个对于正则表达式语法而言有特殊的字符前插入一个反斜线。

这些特殊字符包括:

$^*()+{}[]|\\:

<>可以通过可选参数delimiter定指定用于正则表达式的定界符,使用它也要用反斜线转义。

如:

――――――――――――――――――――――――――――――

显示结果:

现在时间8\:

09,到了明天9\:

40有会议要7\:

30开

mixedpreg_replace(mixedpattern,mixedreplacement,stringstr|intlimit)

preg_replace()函数的作用是“替换模式的所有出现”,并返回修改后的结果。

Pattern为要按照要求的表达式,replacement为要按照要求替换的表达式,str为查找的文本,limit是一个可选的参数表示要进行多少次匹配,不设置和设置为-1表示替换所有出现的情况。

注意:

pattern和replacement可为一个数组类型。

如:

结果:

现在时间[],到了明天[]有会议要[]开

现在时间9:

00,到了明天6:

20有会议要12:

30开

―――――――――――――――――――――――――――――――――――――――――――

mixedpreg_replace_callback(mixedpattern,mixedfunction,stringstr|intlimit)

preg_replace_callback()函数要以通过别外函数返回值进行替换,在替换函数中可以对查找到的内容进行加工返回

显示结果:

现在时间8:

010,到了明天10:

40有会议要7:

30开

―――――――――――――――――――――――――――――――――――――――――

arraypreg_split(stringpattern,stringstr[,intlimit[,intflags]])

preg_split()函数“以不区分大小写的方式将字符串划分成不同元素。

Pattern为分割标识,str为搜索文本,limit为分割个数,flags为分割方式。

如:

显示结果:

Array([0]=>现在时间8:

09[1]=>到了明天9:

40[2]=>有会议要7:

30开)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1