Tad ļoti iespējams, ka cenšaties to izpildīt “uz” pārāk liela teksta. Nesen saskāros ar problēmu, kad regulārā ekspresija, kas pārsēja vienas mājas lapas HTML, dažās situācijās vienkārši neatrada neko (izmantoju preg_match() funkciju). Neizmeta ne kļūdu, ne arī ko citu. Tikai tukšs rezultāts. Nedaudz padebugojot, atklāju, ka tas notiek, ja HTML ir ļooti liels.

Tālāk jau nedaudz pagūglējot, atklājās, ka PHP izmantotais PCRE pakļaujas man īsti neizprotamiem pcre.backtrack_limit un pcre.recursion_limit uzstādījumiem php.ini failā. Īsumā un neprecīzi - tas ir kaut kā saistīts ar to, cik PCRE drīkst izmantot resursus, pārsējot teksta stringu. Ja limits tik sasniegts, pārsēšana pārtrūkst pusceļā.

Risinājums vienkāršs - palielināt šos limitus. Noklusētie PCRE internālie limiti laikam ir 10000000, bet PHP noklusēti tos pārraksta uz 100000, tāpēc var mēģināt PHP uzstādījumos norādīt tādus pašus ciparus, kādi ir PCRE internālie. Bet dariet to piesardzīgi, jo riskējat tādējādi nokarināt pašu PHP, ja limiti būs par lielu.