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