Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

debugowanie wyrażeń regularnych

2 views
Skip to first unread message

mlowicki

unread,
Oct 16, 2009, 11:23:25 AM10/16/09
to
Witam!
http://code.djangoproject.com/changeset/11604 - poprawiono tutaj pewne
wyrazenie regularne - linia 533-537. Czesc, ktora mnie interesuje
sprawdza poprawnosc nazwy domeny. Okazuje sie ze jak dam nazwe domeny
w stylu : yahoo.comx26latlngx3d15854521645943074058 to stare wyrazenie
sprawdza ze ponad godzine podczas gdy nowe mniej niz sekunde. Moglby
mi ktos podpowiedziec dlaczego tak jest ? ewentualnie ktos moglby
podac jakeis materialy wyjasniajace dzialanie silnia regexp w
pythonie ? sprawdzcie sobie te dwa wyrazenia:

p1 = re.compile('(?:[A-Z0-9]+(?:-*[A-Z0-9]+)*\.)+[A-Z]{2,6}',
re.IGNORECASE)
p2 = re.compile('(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]
{2,6}\.?', re.IGNORECASE)

p2.match('yahoo.comx26latlngdafdsfdfadfadfadfad')
p1.match('yahoo.comx26latlngdafdsfdfadfadfadfad')

wynik z p2 dostaje po chwili a z p1 po kilku minutach. Z gory dzieki
za jakies podpowiedzi. pozdrawiam

Filip Wasilewski

unread,
Oct 16, 2009, 12:09:27 PM10/16/09
to
On 16 Paź, 17:23, mlowicki <mlowi...@gmail.com> wrote:
[...]

> ewentualnie ktos moglby
> podac jakeis materialy wyjasniajace dzialanie silnia regexp w
> pythonie ? sprawdzcie sobie te dwa wyrazenia:
>
> p1 = re.compile('(?:[A-Z0-9]+(?:-*[A-Z0-9]+)*\.)+[A-Z]{2,6}',
> re.IGNORECASE)
> p2 = re.compile('(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]
> {2,6}\.?', re.IGNORECASE)

Jeśli przy kompilacji podasz flagę re.DEBUG, to zostaną wyświetlone
informacje na temat tego, jak będzie wyglądało sprawdzanie dopasowania
dla danego wyrażenia regularnego.

p1 = re.compile('(?:[A-Z0-9]+(?:-*[A-Z0-9]+)*\.)+[A-Z]{2,6}',

re.IGNORECASE|re.DEBUG)


p2 = re.compile('(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]

{2,6}\.?', re.IGNORECASE|re.DEBUG)

Podobne informacje można też uzyskać za pomocą nieudokumentowanego
modułu sre_parse: sre_parse.parse('pattern').

Jeśli chodzi o pierwsze wyrażenie, to w czasie jego przetwarzania może
dojść do kosztownej iteracji po kilku zagnieżdżonych pętlach.

Filip Wasilewski
http://filipwasilewski.pl/

mlowicki

unread,
Oct 17, 2009, 7:54:14 AM10/17/09
to

O to właśnie mi chodziło, dzięki wielkie

0 new messages