[Java lista] Pattern.compile bug (jdk 1.5)

Andras Dobrosi andris at freemail.hu
2008. Már. 4., K, 11:57:08 CET


Hi!

Nezopont kerdese. Nem mintha en nem hasznalnek neha regexpet, de ugy
vagyok vele, ha nem gep kritikus a dolog, akkor inkabb megirom en. Nem
vagyok a regexp nagy baratja, inkabb validalok csak vele es kesz.

Nem lehet, hogy az 1.6-os azert gyorsabb, mert kiszerveztek nativba
ezt a regexpesdit? Akinek van kedve bujjon bele a forrasba :), mert
kicsit engem is erdekel az alapproblema.

Andris

2008/3/3 Marai Laszlo <lists at atleta.hu>:
> On Fri, 29 Feb 2008 09:25:22 +0100 (CET)
>  OSTYÁNI Péter <panteros at dev-labs.com> wrote:
>
>   Hali!
>
>
>
>  > > Talalkoztatok ti olyannal, hogy egy hosszu regexnel a Pattern.compile
>  > > iszonyatosan lelassul? Nalam egy olyan 6-700 karakter hosszu regexnel
>  > > lesz kivarhatatlan (1-2 percnel tobbet nem volt turelmem varni).
>
> > Azért én nem merném rögtön azt állítani, hogy ez bug.
>  > Nem tudom mi lehet a különbség a regex feldolgozásban a két
>
>  Hat en sem allitanam, hogy bug, ha az 1.6-ban nem mukodne jol.
>
>
>  > jdk között, de nekem egy 6-700 karakteres regexp eleve
>  > abnormálisnak tűnik.
>
>  36 db vesszovel elvalasztott egesz szam (marmint a peldaban, ami
>  megfekszik), ebbol egy mezot 15 karakter ir le + a vesszo. Szerintem ez
>  annyira nem durva.
>
>
>  > Én megpróbálnám azért átszervezni valahogy.
>  > Csináltam már érdekes dolgokat regexppel, de többszáz
>  > karakteres mintát soha nem próbáltam összefűzni, valószínűleg
>  > nekem ezért nem tűnt fel a sebességkülönbség.
>  > Azért arra is kíváncsi lennék, hogy egy ilyen bonyolult
>  > feldolgozáshoz mennnyi erőforrás szükségeltetik.
>
>  Semmi kulonos. 1.6-tal pikk-pakk mukodik a 2GHz koruli asztali gepemen.
>  Fel sem tunt a problema, amig meg nem probaltam 1.5-on.
>
>  Meregettem egy kicsit a fenti peldaval, es ugy tunik, mintha sikerult
>  volna egy 2^n futasideju algoritmust belerakni az 1.5-os jdkba. A
>  ([+\\-]?[0-9]+)?, patternt 20-nal tobbszor egymas melle pakolva (21, 22,
>  23) szepen mindig 2x-esere no a Pattern.compile futasideje (25x veve
>  2.5 sec, 28x veve 10 sec). Az 1.6-tal gyonyoruen megy akar 10000
>  ismetlessel is (165 ms!!!), csak a stack meretet kell jo nagyra
>  (10M) felhuzni, mert rekurziv az algoritmus.
>
>  A feladat egyebkent nem bonyolult, lenyegeben CSV adatot kell elemeire
>  bontani, ahol az egyes mezok kulonbozo tipusuak lehetnek (String, egesz,
>  lebegopontos, datum, stb.)
>
>  Persze meg lehet oldani ugy is, ciklusban vegigbohockodik az ember a
>  Matcher.find( int ) metodussal, de azert nekem ugy egybe jobban tetszett
>  volna :).
>
>   atleta
>
>
> _______________________________________________
>  Javalist mailing list
>  Javalist at javagrund.hu
>  http://javagrund.hu/mailman/listinfo/javalist
>


További információk a(z) Javalist levelezőlistáról