Portál AbcLinuxu, 10. května 2025 06:40

Dotaz: Regulerni vyrazy v Perlu

31.8.2010 12:41 Radek Podskubka | skóre: 2
Regulerni vyrazy v Perlu
Přečteno: 201×
Odpovědět | Admin
Ahoj, mam problem s jednim regulernim vyrazem. Vyraz je nasledujici

/(.+) (\d) (\d+) ([+-]?[\d\.]+)/

Mel by se tim testovat kazdy radek souboru na svou formalni spravnost. Chapu to tedy tak, ze prvni sloupecek ma obsahovat jakykoliv retezec, druhy sloupecek jednu cislici, treti sloupecek libovolne cislo. Tohle vsechno jsem si nejak otestoval a melo by to tak byt. Nicmene ta posledni zavorka mi neni nejak jasna. Ja to chapu tak, ze by ctvrty sloupecek mel byt retezec, ktery muze nebo taky nemusi obsahovat + nebo - a dale taky obsahuje alespon jednu cislici nebo tecku. Ovsem to se neshoduje s tim, jak se to chova. Jak mam tedy tu ctvrtou zavorku chapat?

Jen pro prehlednost pridavam jeste vetsi cast kodu pro lepsi porozumeni
while (FILE) {
  if (not /^\#/) {
    chomp;
    /(.+) (\d) (\d+) ([+-]?[\d\.]+)/ or print "Error interpreting line:\n$_\n";}}
Mam tedy napriklad jeden radek ktery ve ctvrtem sloupecku obsahuje cisla, ale i pismena a ten projde, nicmene nejaky dalsi radek, ktery obsahuje ve ctvrtem sloupci jinak usporadana pismena s cisly tak ten se uz vytiskne s polu s chybovou hlaskou. Jak je to mozne, podle me by prece mela chybova hlaska vyskocit pokazde, kdyz je obsazeno cokoliv jineho nez + - . nebo cislice

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.8.2010 13:19 buff | skóre: 10 | blog: buff
Rozbalit Rozbalit vše Re: Regulerni vyrazy v Perlu
Odpovědět | | Sbalit | Link | Blokovat | Admin
while (<FILE>) ...

u toho regulárního výrazu chybí ^ na začátku a $ na konci. Takže když matchuje substring, tak to projde.

31.8.2010 13:51 Sten
Rozbalit Rozbalit vše Re: Regulerni vyrazy v Perlu
Odpovědět | | Sbalit | Link | Blokovat | Admin

To první matchuje cokoliv, aby to bralo jenom jeden sloupec, muselo by to být ([^ ]+)

To čtvrté matchuje něco, co volitelně začne + nebo - a dále pokračuje jako posloupnost čísel a teček (přičemž obsahuje nejméně jedno číslo či jednu tečku), tedy asi něco jako číslo (které by bylo lepší ([+-]?(\d+(\.\d*)?|\.\d+)))

A matchuje to i substring, tedy stačí, aby jen část řádku toto splňovala

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.