preg_grep
(PHP4,PHP5) preg_grep--返回与模式匹配的数组单元
说明
arraypreg_grep(stringpattern,arrayinput[,intflags])
preg_grep()返回一个数组,其中包括了input数组中与给定的pattern模式相匹配的单元。 flags可以是以下标记:
PREG_GREP_INVERT
如果传递入此标记,preg_grep()会返回输入数组中不匹配给定pattern的单元。本标记自PHP4.2.0起可用。
自PHP4.0.4起,preg_grep()返回的结果使用从输入数组来的键名进行索引。如果不希望这样的结果,用array_values()对preg_grep()返回的结果重新索引。 上面是手册上对preg_grep()的说明。首先这是perl兼容的正则函数,所以我猜想preg_grep的意思是p(perl)reg(regular)_grep,其特点是可做用于数组,通过自己扩展,可用做多维数组中的正则匹配,并且可以通过flags参数返回匹配或者非匹配数组。其效率比用foreach(...){if...}结构快很多(未验证),而且可匹配复杂模式。在搜索、分检等应用中用途不小。 例: <?
$arr=array('abc'=>12.213,'bb'=>12345,'ba'=>23.2321,34.3,'23'=>'3.3','23434'=>'bbb'); //返回所有含有浮点数的数组元素。
$fl_array=preg_grep("/^(\d+)?.\d+$/",$arr);
print_r($fl_array); ?> preg_match
(PHP3>=3.0.9,PHP4,PHP5) preg_match--进行正则表达式匹配
说明
intpreg_match(stringpattern,stringsubject[,arraymatches[,intflags]])
在subject字符串中搜索与pattern给出的正则表达式相匹配的内容。 如果提供了matches,则其会被搜索的结果所填充。$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。 flags可以是下列标记:
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自PHP4.3.0起可用。 flags参数自PHP4.3.0起可用。 preg_match()返回pattern所匹配的次数。要么是0次(没有匹配)或1次,因为preg_match()在第一次匹配之后将停止搜索。preg_match_all()则相反,会一直搜索到subject的结尾处。如果出错preg_match()返回FALSE。 提示:如果只想查看一个字符串是否包含在另一个字符串中,不要用preg_match()。可以用strpos()或strstr()替代,要快得多。 上面是手册里对preg_match()的说明,我认为这个函数的功用在于他可做来做验证,也就是某字符串是否符合某特定要求。其局限是上面所说的要么匹配0次,要么1次。并且返回值是匹配次数。当需要全匹配时可使用preg_match_all().另外值得一提的是$matches数组的作用,可做自模式的返回值,有时很有用。 例: <? if(preg_match("/(\bweb\b)\s(\d)/i","PHPistheweb45scriptingweb34languageofchoice.",$match)){
print"Amatchwasfound.";
print_r($match);
}else{
print"Amatchwasnotfound.";
} ?> <?PHP
//从URL中取得主机名
preg_match("/^(http:\/\/)?([^\/]+)/i",
"http://www.PHP.net/index.html",$matches);
$host=$matches[2]; //从主机名中取得后面两段
preg_match("/[^.\/]+.[^.\/]+$/",$host,$matches);
echo"domainnameis:{$matches[0]}\n";
?> preg_match_all
(PHP3>=3.0.9,PHP5) preg_match_all--进行全局正则表达式匹配 手册上该函数的解释非常明确,就不多做说明了。
说明
intpreg_match_all(stringpattern,stringsubject,intflags])
在subject中搜索所有与pattern给出的正则表达式匹配的内容并将结果以flags指定的顺序放到matches中。 搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。 flags可以是下列标记的组合(注意把PREG_PATTERN_ORDER和PREG_SET_ORDER合起来用没有意义):
PREG_PATTERN_ORDER
对结果排序使$matches[0]为全部模式匹配的数组,$matches[1]为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。 <?PHP
preg_matchall("|<[^>]+>(.*)</[^>]+>|U",
"example:@H404_40@<divalign=left>thisisatest