Sembra che il codice PHP preg_match
abbia un limite di 3276 caratteri per la corrispondenza di caratteri ripetuti in alcuni casi.PHP preg_match lunghezza 3276 limite
ossia
^(.|\s){0,3276}$
opere, ma ^(.|\s){0,3277}$
non lo fa.
Non sembra sempre applicabile, come funziona /^(.){0,3277}$/
.
Non riesco a trovarlo menzionato nella documentazione di PHP o nel bug tracker. Il numero 3276 sembra un po 'strano, l'unica cosa che posso pensare è che è circa 1/10 di 32767, che è il limite per un intero con 16 bit con segno.
preg_last_error()
ritorna 0.
ho riprodotto la questione sulla http://www.phpliveregex.com/ così come il mio sistema locale e il server web.
EDIT: Sembra che stiamo ottenendo "Warning: preg_match(): Compilazione non riuscita: espressione regolare è troppo grande all'offset 16" fuori dal codice, in modo che sembra essere lo stesso problema come PHP preg_match_all limit.
Tuttavia, la regex stessa non è molto grande ... PHP esegue qualche tipo di espansione quando si ripetono gruppi che lo rendono troppo grande?
è più che probabile un limite di memoria, preg_match restituirà un array con tanti elementi quindi è necessario disporre di memoria sufficiente per consentire un array di grandi dimensioni, provare a superare il limite massimo di memoria e vedere se cambia. –
Hai controllato 'preg_last_error()'? –
indica il tuo errore? dovrebbe esserci qualche tipo di errore se si utilizza troppa memoria – x4rf41