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

要求:有一个字符串文本,大约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>字符串,第二步用回调函数处理去掉到的这个字符串中的分号。

你可能感兴趣的:(字符串)