Heim >php教程 >php手册 >PHP 正则表达式常用函数,php正则表达式函数

PHP 正则表达式常用函数,php正则表达式函数

WBOY
WBOYOriginal
2016-06-13 09:27:001848Durchsuche

PHP 正则表达式常用函数,php正则表达式函数

1.preg_match()

函数原型:int preg_match (string $pattern, string $content [, array $matches])
preg_match ()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。如果提供了$matches,则将匹配结果放入其 中。$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含第一个捕获的与括号中的模式单元所匹配的内容,以此类推。该函数只 作一次匹配,最终返回0或1的匹配结果数。代码6.1给出preg_match()函数的一段代码示例。
代码6.1 日期时间的匹配
代码如下:

<&#63;php 
//需要匹配的字符串。date函数返回当前时间 
$content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together."; 
//使用通常的方法匹配时间 
if (preg_match ("//d{4}-/d{2}-/d{2} /d{2}:/d{2} [ap]m/", $content, $m)) 
{ 
echo "匹配的时间是:" .$m[0]. "/n"; 
} 
//由于时间的模式明显,也可以简单的匹配 
if (preg_match ("/([/d-]{10}) ([/d:]{5} [ap]m)/", $content, $m)) 
{ 
echo "当前日期是:" .$m[1]. "/n"; 
echo "当前时间是:" .$m[2]. "/n"; 
} 
&#63;>

这是一个简单动态文本串匹配实例。假设当前系统时间是“2006年8月17日13点25分”,将输出如下的内容。
匹配的时间是:2006-08-17 01:25 pm
当前日期是:2006-08-17
当前时间是:01:25 pm

2.ereg()和eregi()

ereg()是POSIX扩展库中正则表达式的匹配函数。eregi()是ereg()函数的忽略大小写的版 本。二者与preg_match的功能类似,但函数返回的是一个布尔值,表明匹配成功与否。需要说明的是,POSIX扩展库函数的第一个参数接受的是正则 表达式字符串,即不需要使用分界符。例如,代码6.2是一个关于文件名安全检验的方法。
代码6.2 文件名的安全检验
代码如下:

<&#63;php 
$username = $_SERVER['REMOTE_USER']; 
$filename = $_GET['file']; 
//对文件名进行过滤,以保证系统安全 
if (!ereg('^[^./][^/]*$', $userfile)) 
{ 
die('这不是一个非法的文件名!'); 
} 
//对用户名进行过滤 
if (!ereg('^[^./][^/]*$', $username)) 
{ 
die('这不是一个无效的用户名'); 
} 
//通过安全过滤,拼合文件路径 
$thefile = "/home/$username/$filename"; 
&#63;>

通常情况下,使用与Perl兼容的正则表达式匹配函数perg_match(),将比使用ereg()或eregi()的速度更快。如果只是查找一个字符串中是否包含某个子字符串,建议使用strstr()或strpos()函数。

正则表达式的替换

1.ereg_replace()和eregi_replace()

函数原型:string ereg_replace (string $pattern, string $replacement, string $string)
string eregi_replace (string $pattern, string $replacement, string $string)
ereg_replace()在$string中搜索模式字符串$pattern,并将所匹配结果替换 为$replacement。当$pattern中包含模式单元(或子模式)时,$replacement中形如“/1”或“$1”的位置将依次被这些子 模式所匹配的内容替换。而“/0”或“$0”是指整个的匹配字符串的内容。需要注意的是,在双引号中反斜线作为转义符使用,所以必须使用“//0”,“ //1”的形式。
eregi_replace()和ereg_replace()的功能一致,只是前者忽略大小写。代码6.6是本函数的应用实例,这段代码演示了如何对程序源代码做简单的清理工作。
代码6.6 源代码的清理
代码如下:

<&#63;php 
$lines = file('source.php'); //将文件读入数组中 
for($i=0; $i<count($lines); $i++) 
{ 
//将行末以“//”或“#”开头的注释去掉 
$lines[$i] = eregi_replace("(////|#).*$", "", $lines[$i]); 
//将行末的空白消除 
$lines[$i] = eregi_replace("[ /n/r/t/v/f]*$", "/r/n", $lines[$i]); 
} 
//整理后输出到页面 
echo htmlspecialchars(join("",$lines)); 
&#63;>

2.preg_replace()

函数原型:mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])
preg_replace较ereg_replace的功能更加强大。其前三个参数均可以使用数组;第四个参数$limit可以设置替换的次数,默认为全部替换。代码6.7是一个数组替换的应用实例。
代码6.7 数组替换
代码如下:

<&#63;php 
//字符串 
$string = "Name: {Name}<br>/nEmail: {Email}<br>/nAddress: {Address}<br>/n"; 
//模式 
$patterns =array( 
"/{Address}/", 
"/{Name}/", 
"/{Email}/" 
); 
//替换字串 
$replacements = array ( 
"No.5, Wilson St., New York, U.S.A", 
"Thomas Ching", 
"tom@emailaddress.com", 
); 
//输出模式替换结果 
print preg_replace($patterns, $replacements, $string); 
&#63;>

输出结果如下。

Name: Thomas Ching", 
Email: tom@emailaddress.com 
Address: No.5, Wilson St., New York, U.S.A 

在preg_replace的正则表达式中可以使用模式修正符“e”。其作用是将匹配结果用作表达式,并且可以进行重新运算。例如:
代码如下:

<&#63;php 
$html_body = “<HTML><Body><H1>TEST</H1>My Picture<Img src=”my.gif”></Body></HTML>”; 
//输出结果中HTML标签将全部为小写字母 
echo preg_replace ( 
"/(<//&#63;)(/w+)([^>]*>)/e", 
"'//1'.strtolower('//2').'//3'", //此处的模式变量//2将被strtolower转换为小写字符 
$html_body); 
&#63;>

提示
preg_replace函数使用了Perl兼容正则表达式语法,通常是比ereg_replace更快的替代方案。如果仅对字符串做简单的替换,可以使用str_replace函数。

怎运用PHP函数preg_match_all测试正则表达式效果

  PHP函数preg_match_all代码实例:php自学网2>
 

怎运用PHP函数preg_match_all测试正则表达式效果

今天我们就为大家介绍PHP函数preg_match_all在正则表达式测试中的运用 。 PHP函数preg_match_all代码实例:$html = php自学网php自学网2php自学网3; PHP动态网站开发的技巧分享PHP打印函数的种类总结PHP中$_SERVER的详细资料整理PHP函数stristr()的具体使用方式介绍PHP代码性能优化的技巧讲解 PHP函数preg_match_all实例要求:分别将每一个DIV元素的ID和内容取出,如biuuu,biuuu_2,biuuu_3,php自学网,php自学网2和php自学网3(一些常用的抓站方法就是这样匹配的)分析:字符串是一个简单的HTML元素,每一个DIV元素对应该一个ID和内容,并且是独立的,首先考虑如何取出一个DIV内的ID值和内容, 如:php自学网,然后匹配其它类似的元素 。一个DIV中需要取出两个值,也就是两个匹配的表达式,第一个表达式用于匹配ID值(biuuu),第二个表 达式用于匹配ID的内容(php自学网),正则表达式常用的表达式使用小括号,那么前面的元素将会变成如下形式:(php自学网) (表达式2) 好,使用如上小括号把需要匹配的区域进行了划分,接下来就是如何匹配各个表达式内的内容,我们猜想一个ID可能是字母,数字或下划线,那这就变得简单了,使用中括号就可以实现,如下: 表达式1:[a-zA-Z0-9_]+ (表示匹配大小写字母,数字和下划线) 那如何匹配表达式2,因为ID的内容可以是任意的字符,但是要注意,不能匹配字符,因为如果匹配这两个字符将会把后面使用的DIV都匹配出来,因此需要排除这两个字符开始的元素,也就是不匹配以字符,如下: 表达式2:[^]+ (表示不匹配字符) 这样,PHP函数preg_match_all需要匹配的子表达式就实现了,但是还要需要匹配一个的表达式,方法如下: 表达式:/ "(表达式1)">(表达式2)/ 注意其中的双引号"和/需要使用转义字符转义,然后把前面两个表达式放进去,如下:"([a-z0-9_]+)">/([^]+)/ 这样就实现一个匹配每一个DIV元素ID值和内容的正则表达式,然后使用preg_match_all函数测试如下: $html = php自学网php自学网2php自学网3; p......余下全文>>
 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn