[英]Out of memory using preg_match_all
好的,所以我有一個正則表達式,用於解析單引號/雙引號內的所有文本,它在大多數情況下都可以正常工作,但是如果給定的文本足夠大,它會嘗試分配 20KB 但失敗
<b>Fatal error</b>: Out of memory (allocated 1686110208) (tried to allocate 20480 bytes)
這是導致此錯誤的結果代碼行。
preg_match_all('/([\'"])(?:(?!\1|\\\\).|\\\\.)*\1/', $content, $output_array, PREG_OFFSET_CAPTURE);
如果 "$content" 是特定大小,則會發生錯誤
模式是:
$p = '~" [^"\\\\]*+ (?s:\\\\. [^"\\\\]*)*+ " | \' [^\'\\\\]*+ (?s:\\\\. [^\'\\\\]*)*+ \'~x';
如果您使用 php < 7.2,請在末尾添加 S 修飾符。
注意:捕獲引用並使用反向引用是一個錯誤的好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.