快速业务通道

PHP正则表达式:PHP中的正则函数

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-16
; 匹配除数字以外任何一个字符;等价于[^0-9]

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

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

\s     匹配一个空白字符;等价于[\f\t\v]

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

\f     匹配一个换页符等价于 \x0c 或 \cL

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

匹配一个回车符等价于\x0d 或 \cM

\t     匹配一个制表符;等价于 \x09\或\cl

\v     匹配一个垂直制表符;等价于\x0b或\ck

\oNN   匹配一个八进制数字

\xNN   匹配一个十六进制数字

\cC    匹配一个控制字符

模式修正符(Pattern Modifiers):

模式修正符在忽略大小写、匹配多行中使用特别多,掌握了这一个修正符,往往能解决我们遇到的很多问题。

i     -可同时匹配大小写字母

M     -将字符串视为多行

S     -将字符串视为单行,换行符做普通字符看待,使“.”匹配任何字符

X     -模式中的空白忽略不计  

U     -匹配到最近的字符串

e     -将替换的字符串作为表达使用

格式:/apple/i匹配“apple”或“Apple”等,忽略大小写。     /i

PCRE的模式单元:

//1 提取第一位的属性

/^\d{2} ([\W])\d{2}\\1\d{4}$匹配“12-31-2006”、“09/27/1996”、“86 01 4321”等字符串。但上述正则表达式不匹配“12/34-5678”的格式。这是因为模式“[\W]”的结果“/”已经被存储。下个位置“\1”引用 时,其匹配模式也是字符“/”。

当不需要存储匹配结果时使用非存储模式单元“(?:)”

例如/(?:a|b|c)(D|E|F)\\1g/ 将匹配“aEEg”。在一些正则表达式中,使用非存储模式单元是必要的。否则,需要改变其后引用的顺序。上例还可以写成/(a|b|c)(C|E|F)\2g/。

PCRE正则表达式函数:

preg_match()和preg_match_all()
preg_quote()
preg_split()
preg_grep()
preg_replace()

函数的具体使用,我们可以通过PHP手册来找到,下面分享一些平时积累的正则表达式:

匹配action属性

$str = '''';
$match = '''';
preg_match_all(''/\s+action=\"(?!http:)(.*?)\"\s/'', $str, $match);
print_r($match);

在正则中使用回调函数

/**
* replace some string by callback function
*
*/
function callback_replace() {
$url = ''http://esfang.house.sina.com.cn'';
$str = '''';
$str = preg_replace ( ''/(?<=\saction=\")(?!http:)(.*?)(?=\"\s)/e'', ''search(\$url, \\1)'', $str );

echo $str;
}

function search($url, $match){
return $url . ''/'' . $match;
}

带断言的正则匹配

$match = '''';
$str = ''xxxxxx.com.cn bold font
paragraph text

'';
preg_match_all ( ''/(?<=<(\w{1})>).*(?=<\/\1>)/'', $str, $match );
echo "匹配没有属性的HTML标签中的内容:";
print_r ( $match );

替换HTML源码中的地址

$form_html = preg_replace ( ''/(?<=\saction=\"|\ssrc=\"|\shref=\")(?!http:|javascript)(.*?)(?=\"\s)/e'', ''add_url(\$url, \''\\1\'')'', $form_html );

最后,正则工具虽然强大,但是从效率和编写时间上来讲,有的时候可能没有explode来的更直接,对于一些紧急或者要求不高的任务,简单、粗暴的方法也许更好。

而对于preg和ereg两个系列之间的执行效率,曾看到文章说preg要更快一点,具体由于使用ereg的时候并不多,而且也要推出历史舞台了,再加个个人更偏好于PCRE的方式,所以笔者就不做比较了,熟悉的朋友可以发表下意见,谢谢。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号