求,如果他不能胜任,那么我们还有 preg_replace_callback()函数,可以自定义回调函数,满足你的高级要求。如设计过滤器等。 preg_replace_callback (PHP 4 >= 4.0.5, PHP 5) preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换 说明 mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )
本函数的行为几乎和 preg_replace() 一样,除了不是提供一个 replacement 参数,而是指定一个 callback 函数。该函数将以目标字符串中的匹配数组作为输入参数,并返回用于替换的字符串。 例子 1. preg_replace_callback() 例子 <?php // 此文本是用于 2002 年的, // 现在想使其能用于 2003 年 $text = "April fools day is 04/01/2002\n"; $text.= "Last christmas was 12/24/2001\n"; // 回调函数 function next_year($matches) { // 通常:$matches[0] 是完整的匹配项 // $matches[1] 是第一个括号中的子模式的匹配项 // 以此类推 return $matches[1].($matches[2]+1); } echo preg_replace_callback( "|(\d{2}/\d{2}/)(\d{4})|", "next_year", $text); // 结果为: // April fools day is 04/01/2003 // Last christmas was 12/24/2002 ?>
You''ll often need the callback function for a preg_replace_callback() in just one place. In this case you can use create_function() to declare an anonymous function as callback within the call to preg_replace_callback(). By doing it this way you have all information for the call in one place and do not clutter the function namespace with a callback functions name not used anywhere else. 对于使用 preg_replace_callback()函数的朋友来说,你应该回需要callback函数(否则用他干嘛,直接用preg_replace不是更好),不过也经常只是用一处。既然这样你可以用create_function()来声明一个匿名函数作为 preg_replace_callback()的回调函数。这样,我们即满足了声明信息的需要,有不致因这个不会再用到的函数名而混乱。 例子 2. preg_replace_callback() 和 create_function() <?php /* 一个 UNIX 风格的命令行过滤器,将每个段落开头的 * 大写字母转换成小写字母 */ $fp = fopen("php://stdin", "r") or die("can''t read stdin"); while (!feof($fp)) { $line = fgets($fp); $line = preg_replace_callback( ''|<p>\s*\w|'', create_function( // 这里使用单引号很关键, // 否则就把所有的 $ 换成 \$ ''$matches'', ''return strtolower($matches[0]);'' ), $line ); echo $line; } fclose($fp); ?>
最后是 preg_split (PHP 3 >= 3.0.9, PHP 4, PHP 5) preg_split -- 用正则表达式分割字符串 不再赘述。 说明 array preg_split ( string pattern, string subject [, int limit [, int flags]] )
返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。 如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。 flags 可以是下列标记的任意组合(用按位或运算符 | 组合):
PREG_SPLIT_NO_EMPTY 如果设定了本标记,则 preg_split() 只返回非空的成分。 PREG_SPLIT_DELIM_CAPTURE 如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。本标记添加于 PHP 4.0.5。 PREG_SPLIT_OFFSET_CAPTURE 如果设定了本标记,如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
提示: 如果不需要正则 |