我目前正在努力解决PHP的奇怪行为(至少对我来说这似乎很奇怪)。
我已经获得了此代码(它匹配缓存的HTML页面中的所有src
和href
属性,这些属性可能不是最佳的,但可以完美运行):
$regex = '#(</?\w+\s+(?:\w+(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^"\'>\s]+))?\s*)*(?:href|src)\s*=\s*)("[^"]*"|\'[^\']*\'|[^"\'>\s]+)#Uis';
$buffer = preg_replace_callback($regex, function($match) {
$match[2] = preg_replace('/^["\'](.*)["\']$/', '\1', $match[2]);
// do further stuff
return $match[0];
}, $buffer);
现在,我花了非常来弄清楚为什么preg_replace_callback
仅在某些情况下会返回NULL,结果证明它在字符串大于2 ^ 16,这对我来说似乎很奇怪,因为我之前从未遇到任何PHP限制问题,我甚至缓冲了数百MB的文件。
我现在尝试的是:
$test = str_repeat('1', 65537); // 2**16+1
echo $test; // NULL (prints an empty string)
我问Google,但我确实找到了没有。似乎没有人遇到这个问题,而且每个消息来源都说你甚至可以将GB存储在一个字符串中。
我正在使用OS X和内置AMPP环境。