preg_replace_callback

(PHP 4 >= 4.0.5, PHP 5, PHP 7)

preg_replace_callbackִ��һ��������ʽ��������ʹ��һ���ص������滻

˵��

preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed

�����������Ϊ���� ����ָ��һ�� callback ��� replacement �����滻 �ַ����ļ��㣬���������ͬ�� preg_replace()��

����

pattern

Ҫ������ģʽ���������ַ�����һ���ַ������顣

callback

һ���ص���������ÿ����Ҫ�滻ʱ���ã�����ʱ�����õ��IJ����Ǵ�subject ��ƥ�䵽�Ľ�����ص������������������滻���ַ��������Ǹûص�������ǩ����

handler ( array $matches ) : string

����ܾ�������Ҫcallback������ ������preg_replace_callback()һ���ط��ĵ��á�����������£������ ʹ����������������һ������������ Ϊpreg_replace_callback()����ʱ�Ļص��� ����������Ա������� ������Ϣ��ͬһ��λ�ò��Ҳ�����Ϊһ�������κ������ط�ʹ�õĻص��������ƶ���Ⱦ�������ƿռ䡣

Example #1 preg_replace_callback() �� ��������

<?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|',
        function (
$matches) {
            return 
strtolower($matches[0]);
        },
        
$line
    
);
    echo 
$line;
}
fclose($fp);
?>

subject

Ҫ�����滻��Ŀ���ַ������ַ������顣

limit

����ÿ��ģʽ����ÿ�� subject �ַ����������滻������ Ĭ����-1�������ƣ���

count

���ָ������������������Ϊ�滻ִ�еĴ�����

����ֵ

���subject��һ�����飬 preg_replace_callback()����һ�����飬������������ַ����� ������ʱ���� NULL��

������ҵ���ƥ�䣬�����滻���Ŀ���ַ��������ַ������飩�� �������subject �����ޱ仯���ء�

������־

�汾 ˵��
5.1.0 �����˲���count��

����

Example #2 preg_replace_callback()ʾ��

<?php
// ���ı��е��������һ��.
$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

Example #3 preg_replace_callback()ʹ�õݹ鹹�촦��BB��ķ�װ

<?php
$input 
"plain [indent] deep [indent] deeper [/indent] deep [/indent] plain";

function 
parseTagsRecursive($input)
{
     
/* ��ע: �Դ�������ʽ�ֶη���
     * ��β����#������ָ���
     * \[indent] ƥ��һ��ԭ�ĵ�[indent]
     * ((?:[^[]|\[(?!/?indent])|(?R))+)����:
     *   (?:[^[]|\[(?!/?indent])����:
     *  ��������һ���Dz�������
     *   ������ѡ·��, һ���Ƿ�[�ַ�, ��һ����[�ַ�����������Ų���/indent��indent.
     *   (?R) ������ʽ�ݹ�
     *     \[/indent] ƥ�������[/indent]
     * /

    $regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';

    if (is_array($input)) {
        $input = '<div style="margin-left: 10px">'.$input[1].'</div>';
    }

    return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}

$output = parseTagsRecursive($input);

echo $output;
?>

�μ�