Maximální délka řetězce pro regexp výrazy?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ic
Člen | 430
+
0
-

dostal jsem se k téhle chybě:

Backtrack limit was exhausted (pattern: ~<něco napevno>(.+)<prostředek>(.+)<konec>~i)

kterou mi vypisuje String::match na dlouhém řetězci… pouze při délce při délce 2093 a více znaků !

pomáhá na to rozdělení práce mezi více regulárních výrazů: ~<něco napevno>(.+)<prostředek> a ~<prostředek>(.+)<konec>~ čímž délku nepřekročím, ale říkám si…

Nebylo by pro výkon aplikace lepší to mít v jednom kuse? Dá se nějak ta maximální délka výsledného řetězce nastavit? Mám nechat takhle ve dvou dílech, nebo je na to ještě jiné řešení?

Majkl578
Moderator | 1364
+
0
-

V php.ini je položka pcre.backtrack_limit, defaultně hodnota 100000.

kravčo
Člen | 721
+
0
-

Možno Určite by pomohlo, keby si napísal ako presne ten regulár vyzerá. To, že vyčerpá backtrackový limit na ~2000 znakoch je podľa mňa dosť neštandardné.

Alebo tých ~2000 znakov je dlhý ten regulár?

Editoval kravčo (14. 10. 2010 1:24)

ic
Člen | 430
+
0
-

Tohle jsem asi nenapsal úplně srozumitelně… problém dělá to pole co se vrátí, konkrétně první záznam, kde je celý řetězec na kterém se hledalo… ten když má 2092, tak ok, ale 2093 a více už selže.

kravčo
Člen | 721
+
0
-

… oveľa múdrejší z toho nie som. Keď to vráti pole, tak to predsa nezlyhá, nie?

ic
Člen | 430
+
0
-

kravčo napsal(a):

… oveľa múdrejší z toho nie som. Keď to vráti pole, tak to predsa nezlyhá, nie?

jasně, dostanu pole o 3 prvních, z nichž ten první nepotřebuju, ale právě ten pokud má více než 2092 tak to celý umře a nedostanu pole ale chybičku.

kravčo
Člen | 721
+
0
-

Podľa neúplného popisu reguláru máš len dve časti, ktoré zachytávaš, tretiu teda zachytávaš možno zbytočne, každopádne to asi ten backtrack limit neovplyvní…

kravčo napsal(a):

Možno Určite by pomohlo, keby si napísal ako presne ten regulár vyzerá. …

Bez toho ti nemám ako ďalej poradiť…

arron
Člen | 464
+
0
-

Ja vlastne nevim, co presne ten backtrack_limit v realu predstavuje, ale v praxi jsem taky narazil na to, ze pomerne rychle dosel. Takze z meho pohledu je potreba ho proste zvysit (i relativne o dost). Nicmene pokud se to tu podari vyresit jinak, tak se velice rad poucim:-)