用正则去掉一个字符串里指定区域里的分号

要求:有一个字符串文本,大约100k,去掉<CDATA></CDTA>之间的字符串里的分号。文本示例如下:aaa<CDATA>;1234;</CDATA><CDATA>aa;;;56</CDATA>";

解答代码:

<?php 
$str = "aaa<CDATA>;1256;</CDATA><CDATA>aa;;;44</CDATA>";
echo preg_replace_callback('/(?<=<CDATA>).*?(?=<\/CDATA>)/', 'replaceSymbol', $str);

function replaceSymbol($str) {
    return str_replace(';', '', $str[0]);
}
?>

解释:关键在于preg_replace_callback()函数。该题分两部:第一步匹配出<CDATA></CDATA>字符串,第二步用回调函数处理去掉到的这个字符串中的分号。

posted @ 2013-08-01 15:34  洒洒  阅读(2537)  评论(0编辑  收藏  举报