-
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
From: Paweł Kierski <n...@p...net>
Newsgroups: pl.comp.programming
Subject: regexp - jak napisać źle i co z tego wynika
Date: Thu, 21 May 2009 11:04:12 +0200
Organization: http://onet.pl
Lines: 75
Message-ID: <gv35ej$bt1$1@news.onet.pl>
Reply-To: n...@p...net
NNTP-Posting-Host: 91.197.12.14
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.onet.pl 1242896659 12193 91.197.12.14 (21 May 2009 09:04:19 GMT)
X-Complaints-To: n...@o...pl
NNTP-Posting-Date: Thu, 21 May 2009 09:04:19 +0000 (UTC)
User-Agent: Mozilla-Thunderbird 2.0.0.0 (X11/20070601)
Xref: news-archive.icm.edu.pl pl.comp.programming:182080
[ ukryj nagłówki ]"Trochę" "upojnego" debugowania doprowadziło mnie do znalezienia
błędu, który został popełniony przy pisaniu regexpa. Oryginalny był
baaardzo długi i skomplikowany, tu pokażę samo "mięsko".
W założeniu miał łapać sekwencję:
("wyraz" jeden lub więcej razy, "separator") jeden lub więcej razy,
napis "xyz". "wyraz" to literki, "separator" to kropka lub podkreślenie.
No i napisano:
([A-z]+[._])+xyz
Po czym regexp trafił na długi ciąg podkreśleń i... zawisł. Tu dam
spoiler, gdyby ktoś chciał samodzielnie pokombinować 8-)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
[A-z] to miał być skrót [A-Za-z] (tak można, użyć klas znaków, ale
komuś się nie chciało zajrzeć do dokumentacji). Niestety [A-z] to
[A-Z\[\\\]\^_`a-z] (znaki "[\]^_`" oprócz liter). Dla przypadku szukania
w ciągu podkreśleń można całe wyrażenie zredukować do: "(_+_)+xyz".
Automat próbuje:
- _+ dopasowało się do całego ciągu (zachłannie), ale ciąg się skończył
- _+ dopasowało się do całego ciągu -1 znak, _ dopasowało się do
ostaniego _, ale nie ma xyz
- _+ dopasowało się do całego ciągu -2 znaki, _ dopasowało się do
przedostaniego _, próbujmy jeszcze raz z _+ - dopasowało się, ale nie
ma _
- _+ dopasowało się do całego ciągu -3 znaki, _ dopasowało się do
_ 2 znaki od końca, próbujmy jeszcze raz z _+ - dopasowało się do
dwóch _ z końca, ale nie ma _
- _+ dopasowało się do całego ciągu -3 znaki, _ dopasowało się do
_ 2 znaki od końca, próbujmy jeszcze raz z _+ - dopasowało się do
przedostaniego _, _ dopasowało się do ostatniego _, ale nie ma xyz
... i tak dalej - drzewo poszukiwań rośnie szybko, a zawsze na końcu
brakuje tego "xyz", a trzeba różnych kombinacji dopasowań "(_+_)+".
Cały problem powstaje zawsze, gdy dla (R1+R2)+ jest taki ciąg, do
którego można dopasować zarówno R1 jak i R2, i taki ciąg wystąpi wiele
razy po sobie.
--
Paweł Kierski
n...@p...net
Następne wpisy z tego wątku
- 21.05.09 13:12 Marcin 'Malcom' Malich
- 21.05.09 14:16 Paweł Kierski
- 21.05.09 17:06 Daniel Janus
- 21.05.09 20:40 matmis
- 22.05.09 07:51 Paweł Kierski
- 22.05.09 07:54 Paweł Kierski
- 24.05.09 21:03 matmis
- 25.05.09 07:37 Paweł Kierski
Najnowsze wątki z tej grupy
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-05-26 O co chodzi?
- 2024-05-26 PJ autobus-tramwaj
- 2024-05-26 Renault Trafic i lampka z czerwonym STOP
- 2024-05-26 cena pięciocyfrowa
- 2024-05-26 Re: Jak dobra KE "okrada" złą Rosję "dla Ukrainy"
- 2024-05-25 supercap
- 2024-05-25 Sulzbach => Technischer Rollouter (d/m/w) <=
- 2024-05-25 Warszawa => Senior Account Manager <=
- 2024-05-25 Warszawa => Mid PHP Developer (Laravel) <=
- 2024-05-25 Warszawa => Mid PHP Developer (Laravel) <=
- 2024-05-25 Warszawa => Interactive/Experience Designer <=
- 2024-05-25 Warszawa => Key Account Manager <=
- 2024-05-25 Warszawa => SAP WM Consultant / Execution <=
- 2024-05-25 Warszawa => Key Account Manager <=
- 2024-05-25 Re: znów ten wrocław