簡體   English   中英

memory 使用 preg_match_all

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM