正则表达式Perl风格的语法:
perl风格的语法与POSIX稍有不同,以两个斜线为表达式的边界,例:
/food/ 或者/fo+/
1,修饰符
修饰符对编写简洁短小的表达式大有帮助,以下是一些注意的修饰符。
i 完成不区分大小写的搜索。
g 查找所有出现
m 将一个字符串视为多行。
s 将一个字符串视为一行,忽略其中的所有换行符。
x 忽略正则表达式中的空白和注释。
U 第一次匹配后停止.防止贪婪。
这些修饰符直接放在正则表达式的后面,
2,元字符
\A 只匹配字符串开头。
\b 匹配单词边界。
\B 匹配除单词边界之外的任意字符。
\d 匹配数字字符。
\D 匹配非数字字符。
\s 匹配空白字符。
\S 匹配非空白字符。
[]
()
$
^
.
\ 引出下一个元字符。
\w 匹配字母数字下划线。
\W 与其相反
例:
\b的用法 /sa\b/ 就可以与pisa和lisa匹配,而不匹配sand
php正则表达式函数之Perl风格
为使用perl风格的正则表达式搜索字符串提供了7个函数:
arraypreg_grep(string pattern,array input [,flags])
此函数搜索叔祖中的所有元素,返回由与某个模式匹配的所有元素组成的数组(注意是搜索数组)
可选参数将输出不匹配数组元素。
<?php $foods = array("hello","how","fuck","you");$food = preg_grep("/^h/",$foods);print_r($food); //将输出array([0]=>hello,[1]=>how)
?>
int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )
此函数在字符串中搜索模式,注意返回所匹配的次数,因为preg_match()在第一次匹配之后将停止搜索。所以要麽返回0次要麽返回1次。与preg_match_all()则相反,会一直搜索到结尾。
int preg_match_all(string pattern,string string ,array pattern_array[,int order])
此函数在字符串中匹配模式的所有出现,以便通过可选的输入参数order所指定的顺序。
<?php $userinfo = "Name:Zeev Suraski
Title:PHP
Guru";preg_match_all("/(.*)/U",$userinfo,$pat_array);printf("%s
%s",$pat_array[0][0],$pat_array[0][1]);?>
这里注意:参数$pat_array与之前的函数输出数组并无不同,[0]位输出整个匹配的项,只不过当有多个匹配项时将作为一个数组放在[0]位里,例如上例中$pat_array[0]的内容是array([0]=>Zeev Suraski[1]=>PHP Guru),而$pat_array[1]、$pat_array[2]....则是小括号的内容,当然如果有多个匹配项的话,那$pat_array[1]、[2]则也是数组,一个包含多个小括号里内容的数组。
string preg_quote(string str [,string delimiter])
此函数preg_quote()在每个对于正则表达式语法而言有特殊含义的字符前插入一个反斜线。包括:$^*+={}[]|\\:<>
mixed preg_replace(mixed pattern,mixed replacement,mixed str [,int limit])
此函数用replcement替换pattern的所有出现,并返回修改后的结果。
例:
<?php $text = "This is a link to http://www.wjgilmore.com/.";echo preg_replace("/http:\/\/(.*)\//","\${0}",$text); //注意因为“和$在表达式中都有含义所以要用反斜线转义。
?>
参数pattern和replacement还可以是数组,例:
mixed preg_replace_callback(mixed pattern,callback callback,mixed str[, int limit])
定制函数进行替换。
<?phpfunction arconmy($matches){$arconys = array("VIP"=>"very import peron","scjp"=>"sun certification java person","PET"=>"English is very good");if(isset($arconys[$matches[1]])){return $matches[1]."(".$arconys[$matches[1]].")";
}else
return $matches[1];
}$text ="VIP is very well ,scjp is very well ,PET is very well";$new = preg_replace_callback("/\b(.*)\b/U",'arconmy',$text);echo $new;?>
array preg_split(string pattern,string string [,int limit[,int flags]])
此函数以不区分大小写的方式将字符串划分为不同的元素。
<?php $delimitedText ="Jason+++++Gilmore+++++++Columbus+++OH";$fields = preg_split("/\+{1,}/",$delimitedText);foreach($fields as $field)echo $field."
";?>