字符串
正则表达式
PHP支持POSIX和Perl两种正则表达式实现的特性和语法。
POSIX
略
perl
perl与JavaScript的正则表示风格一致,故采用perl版的正则表达式。
preg_grep()
<?php
$a=array("pasta","steak","fish","potatoes");
$food = preg_grep("/^p/",$a,1); //当传入第三个参数1时,输出不匹配的所有元素
print_r($food); //输出数组对应于输入数组的索引顺序
?>
preg_match();
<?php
$text = "ticketre are $500.";
preg_match("/a(re)/",$text,$match);
print_r($match) ; //输出一个array("are","re")
?>
preg_match_all()
<?php
$text = "ticketre are $500.";
preg_match_all("/a(re)/",$text,$match);
print_r($match) ; //$match[0]内是所有与模式完全匹配的所有字符串的数组,$match[1]中含有所有与模式第一个小括号匹配的元素,以此类推
?>
preg_quote()
<?php
$text = "ticket are $500.";
echo preg_quote($text); //在对正则表达式而言有特殊含义的字符前插入一个反斜线
//输出为"ticket are \$500\."
?>
preg_replace()
<?php
$text = "this is a link to http://www.wilsonliu.cn/.";
echo preg_replace("/http:\/\/(.*)\//","<a href=\"\${0}\">\${0}</a>",$text);
?>
//preg_replace还可以对数组进行替换
<?php
$draft = "In 2007 the company faced plummeting revenues and scandal.";
$keywords = array("/faced/","/plummeting/","/scandal/");
$replacements = array("celebrated","skyrocketing","expansion");
echo preg_replace($keywords,$replacements,$draft);
?>
preg_replace_callback(pattern,callback,str)
<?php
function acronym($matches){
$acronym = array(
"WWW" => "World Wide Web",
"IRS" => "Internal Revenue Service",
"PDF" => "Portable Document Format"
);
if(isset($acronym[$matches[1]])){
return $matches[1] . "(" . $acronym[$matches[1]] . ")";
}else {
return $matches[1];
}
}
$text = "The <acronym>IRS</acronym>offers tax forms in <acronym>PDF</acronym>format on the <acronym>WWW</acronym>.";
$newtext = preg_replace_callback("/<acronym>(.*)<\/acronym>/U","acronym",$text);
print_r($newtext);
//The IRS(Internal Revenue Service)offers tax forms in PDF(Portable Document Format)format on the WWW(World Wide Web).
?>
preg_split()
<?php
$text = "wilson++++liu++++++tianna+++row";
$arr = preg_split("/\+{1,}/",$text);
foreach($arr as $p){
echo $p . "\n";
}
?>
其他字符串函数
strlen
strcmp
(区分大小写)strcasecmp
(不区分大小写)strtolower()
(全部转化为小写)strtoupper()
(全部转化为大写)
正则表达式的替代函数
strtok
根据预定义的字符对字符串进行词法分析
<?php
$info = "wilson|world,china,change";
$tokens = ":|,";
$tokenized = strtok($info,$tokens);
while($tokenized){
echo "log:$tokenized \n";
$tokenized = strtok($tokens); //每次调用该函数只是对字符串的下一部分做词法分析,必须连续的调用该函数
}
?>
explode
根据预定义的定界符分解字符串
<?php
$info = "wilson | world, china , change";
print_r(explode(" ",$info));
?>
implode
将数组转换为字符串
<?php
$info = "wilson world china change";
$test = explode(" ",$info);
print_r(implode("*",$test));
?>