在PHP中提供了两套正则表达式函数库
一套是由PCRE(Perl Compatible Regular Expression)库提供的。PCRE库使用和perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的。POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数。
两套函数库的功能相似,执行效率稍有不同。一般而言,实现相同的功能,使用PCRE库的效率略占优势。
PHP中PCRE风格的函数
1、preg_match() 函数函数原形:
int preg_match(string $pattern, string $content[,array $matches])
preg_match()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。如果提供了$matches,则将匹配结果放入其中。$matches[0]将包含与整个匹配的文本,$matches[1]将包含第一个捕获的与括号中的模式单元所匹配的内容,以此类推。该函数只作一次匹配,最终返回0或1的匹配结果数。
<?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";
}
?>
2、preg_grep()函数
函数原型:
array preg_grep(string $pattern,array $input)
Preg_grep()函数返回一个数组,其中包括了$input数组中与给定的$pattern模式相匹配的单元。对于输入数组$input中的每个元素,preg_grep()也只进行一次匹配
<?php
$subjects = array(
"Mechanical Engineering", "Medicine",
"Social Science", "Agriculture",
"Commercial Science", "Politics"
);
//匹配所有仅由有一个单词组成的科目名
$alonewords = preg_grep("/^[a-z]*$/i", $subjects);
?>
3、preg_match_all()函数
与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。本函数返回整个模式匹配的次数(可能为0),如果出错返回False。
<?php
//功能:将文本中的链接地址转成HTML
//输入:字符串
//输出:字符串
function url2html($text)
{
//匹配一个URL,直到出现空白为止
preg_match_all("/http:\/\/?[^\s]+/i", $text, $links);
//设置页面显示URL地址的长度
$max_size = 40;
foreach($links[0] as $link_url)
{
//计算URL的长度。如果超过$max_size的设置,则缩短。
$len = strlen($link_url);
if($len > $max_size)
{
$link_text = substr($link_url, 0, $max_size)."...";
} else {
$link_text = $link_url;
}
//生成HTML文字
$text = str_replace($link_url,"<a href='$link_url'>$link_text</a>",$text);
}
return $text;
}
//运行实例
$str = “这是一个包含多个URL链接地址的多行文字。欢迎访问http://www.taoboor.com”;
print url2html($str);
/*输出结果
这是一个包含多个URL链接地址的多行文字。欢迎访问<a href='http://www.taoboor.com'>
http://www.taoboor.com</a>
*/
?>
4、preg_replace()函数
函数原形:
mixed preg_replace(mixed $patten,mixed $replacement,mixed $subject[,int $limit])
Preg_replace较ereg_replace的功能更加强大 ,其前三个参数均可以使用数组;第四个参数$limit可以设置替换的次数,默认为全部替换。
<?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);
?>
5、preg_split()函数
本函数与split函数功能一致。
<?php
$seek = array();
$text = "I have a dream that one day I can make it. So just do it, nothing is impossible!";
//将字符串按空白,标点符号拆分(每个标点后也可能跟有空格)
$words = preg_split("/[.,;!\s']\s*/", $text);
foreach($words as $val)
{
$seek[strtolower($val)] ++;
}
echo "共有大约" .count($words). "个单词。";
echo "其中共有" .$seek['i']. "个单词“I”。";
?>
转载请注明来源网址:青锋建站-http://www.sjzphp.com/webdis/phpreg.html