Portál AbcLinuxu, 6. června 2024 10:18


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

Vložit další komentář
23.1.2008 00:06 I
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Regularni vyrazy nejsou slozite, protoze slozite je to teprve bez nich =)
23.1.2008 02:02 kafa | skóre: 10
Rozbalit Rozbalit vše Re: Regulární výrazy
Přesně tak. Vždycky mě velmi pobaví, když někdo právě na regulárních výrazech demonstruje údajnou nečitelnost (a nepoužitelnost) Perlu. Já už bych nikdy nechtěl dělat kontrolu vstupů v jazyce, který neumožňuje regulární výrazy. Na tu dřinu se ještě pamatuju.
David Watzke avatar 23.1.2008 14:06 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Souhlasím, přepisoval jsem slovnik.cz CLI do Perlu a díky chybějícímu switch/case (bude v Perl 6, btw.) jsem to vyřešil daleko snadněji pomocí regexpů.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
zoul avatar 23.1.2008 14:33 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: Regulární výrazy
BTW: given/when už je i v pětkové řadě Perlu.
23.1.2008 14:38 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Regulární výrazy
my $mode_map = {
  'show' => \ &do_show,
  'submit' => \ &do_submit,
};

$mode_map->{$mode}->(@param);
uznávam, na given/when to nemá, obyčajný switch/case to zvládne v pohode.

pre parsovanie textu si pozri \G a modifikátory cg

Honza Balák avatar 23.1.2008 00:29 Honza Balák | skóre: 23 | blog: Jaxův linuxový zápisník | Předklášteří
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Výbornej článek. Jelikož ve tvorbě regexp trochu plavu (nebo spíš pro kontrolu), tak používám www.regexp.cz. Co se týká praktického použití, tak třeba nedávno místo abych se paplal s vytvářením výrazu na změnu názvů souborů, tak jsem raději použil KRename, ale stejně to bylo kontraproduktivní, protože tu změnu jsem z jistých důvodů musel dělat několikrát. Takže místo abych jen v historii našel příkaz a znovu spustil, tak jsem musel znovu projít cestu Next->Next v KRename.
<null>
23.1.2008 07:55 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: Regulární výrazy
Fajn odkaz, ale dostala se ti do neho chybicka :-) Spravne to ma byt www.regexp.cz

Dejv
Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
23.1.2008 00:29 petris
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
takže použijete-li například o odstavec výše zmíněný výraz .* a ihned za něj dáte například [0-9]* (libovolný počet číslic), tak si všimněte, že výraz .* využil své moci a označil vše, co jen mohl a na množinu [0-9]* zbyla už jen poslední číslice v řetězci
Na [0-9]* nezbyde nic.
Honza Balák avatar 23.1.2008 00:39 Honza Balák | skóre: 23 | blog: Jaxův linuxový zápisník | Předklášteří
Rozbalit Rozbalit vše Re: Regulární výrazy
Taky mi to bylo divný, protože vím, že ing. Brandejs na přednáškách říkal, že hvězdička je maximálně žravá.
<null>
David Watzke avatar 23.1.2008 07:29 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Omlouvám se, moje chyba, hlavně že dole v ukázce u sedu mám potom [0-9]+.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
23.1.2008 08:25 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Regulární výrazy
Opraveno (máslo i na mojí hlavě - měl jsem si toho všimnout).
Fluttershy, yay! avatar 23.1.2008 00:44 Fluttershy, yay! | skóre: 92 | blog:
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Danke schön.
🇵🇸Touch grass🇺🇦 ✊ no gods, no masters
23.1.2008 00:48 petris
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Závorky a alternativa jsou i v nerozšířených regexpech, protože jinak by se tím nedal popsat regulární jazyk. Více třeba na wikipedii.
23.1.2008 08:38 DarkCraft | skóre: 3 | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Celkem pekny clanek, ale zda se mi pomerne zbytecny, mame tu o tom cele weby, jak jiz nekdo zminil treba http://www.regexp.cz a pak take http://www.regularnivyrazy.info/ takze jak rikam.. Pekne, ale uz o tom bylo napsano moc.
Podporuji ArchLinux;jabber conference: archlinux.cz@conference.jabber.org; http://darkcraft.org
23.1.2008 09:11 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Regulární výrazy
man perlre
O'Reilly - Mastering Regular Expressions
23.1.2008 09:23 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Len taka drobnost: [a-zA-Z] != [:alpha:]
myslim, ze je to armensky jazyk, kde pismeno "z" je cca v druhej tretine abecedy ;-)
Project Satan infects Calculon with Werecar virus
23.1.2008 10:02 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Regulární výrazy
aj v slovenčine z nie je posledné písmeno abecedy :-)
"správne" by malo byť [a-ž] :-D
David Watzke avatar 23.1.2008 11:33 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Len taka drobnost: [a-zA-Z] != [:alpha:]
Já jsem někde napsal, že je to totéž?
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
23.1.2008 12:16 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Nie, moj prispevok je spomienka na jednu bugu ;-)
Project Satan infects Calculon with Werecar virus
23.1.2008 09:41 CET
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
[a-zA-Z]  # Množina rozsahu znaků. Odpovídá jednomu a více
          # výskytům písmen A až Z (malá i velká písmena,
          # pouze bez diakritiky).
Jenom drobnost - tenhle zapis odpovida prave jednomu znaku z mnoziny A-Z nebo a-z. Kdyby to bylo jeden a vic, tak za tim musi byt "+".
David Watzke avatar 23.1.2008 11:35 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Hmm, zase chybka... Tak to nevím na co jsem v tu chvíli myslel.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
geon avatar 23.1.2008 10:18 geon | skóre: 18 | blog: bavaria
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Mě se velmi líbí grafické zpracování regulárních výrazů. Je to starší, pro Python, ale přeci.

regex_characters.png

regex_characters.png
mj41 avatar 23.1.2008 11:13 mj41 | skóre: 17 | blog: mj41 | Brno
Rozbalit Rozbalit vše Perlové jsou především nejmocnější
Odpovědět | Sbalit | Link | Blokovat | Admin
Složitější? Ja bych to napsal, tak že ty Perlové uměly vždycky nejvíce a byly nejrychlejší.

Jinak jak budou regulární výraze resp. gramatiky vypadat v Perlu 6 najdete v Synopses 5. Bude to zase o kousek dál.

Např. samotná gramatika Perlu 6, resp. základ parseru v implementaci Rakudo (implementace Perlu 6 pro virtuální stroj Parrot), na které se začalo pracovat poměrně nedávno, vypadá takto.

To k čemu by se měla každá z implementací dopracovat je v Larryho zatím nedokončeném (nefungujícím) návrhu STD gramatiky. Ale to už jsme se dostal k té nejsložitější věci co jsem kdy viděl a samozřejmě ještě nepochopil :-).
David Watzke avatar 23.1.2008 14:03 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Perlové jsou především nejmocnější
Složitější? Ja bych to napsal, tak že ty Perlové uměly vždycky nejvíce
No právě :-) Dokonce si člověk může napsat vlastní RE engine.
Ale to už jsme se dostal k té nejsložitější věci co jsem kdy viděl a samozřejmě ještě nepochopil :-).
Ano, přesně o tom mluvím :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
thingie avatar 23.1.2008 16:36 thingie | skóre: 8
Rozbalit Rozbalit vše Re: Perlové jsou především nejmocnější
Regulární výrazy jako skutečné regulární výrazy, budou-li regulárními výrazy, tak přece nemůžou umět víc nebo míň, musí umět všechny stejně.
Růžové lži.
zoul avatar 23.1.2008 17:01 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: Perlové jsou především nejmocnější
„Regulární výrazy“ v Perlu a většině ostatních jazyků nebo knihoven nejsou klasické regulární výrazy v informatickém slova smyslu – viz například (.*)\1 (WikiWiki, MoinMoin apod.), což podle Wikipedie není ani bezkontextové, natož regulární. I v rámci třídy regulárních výrazů ale můžou být některé věci navíc – viz například pojmenované závorky (named captures) v novém pětkovém Perlu.
thingie avatar 23.1.2008 17:09 thingie | skóre: 8
Rozbalit Rozbalit vše Re: Perlové jsou především nejmocnější
No, to opravdu není ani bezkontextové, no. Ale to je pak trochu zvrhlý bavit se o regulárním výrazu, když nám na to nestačí ani zásobníkovej automat. (Byť třeba tuhle speciální věc je asi snadný implementovat.)
Růžové lži.
zoul avatar 23.1.2008 17:18 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: Perlové jsou především nejmocnější
Jasně, ale to názvosloví už je zažité a těžko po někom chtít, aby dodržoval přesné definice z teorie automatů. Větší problémy z toho stejně nekoukají – pokud někdo automatům a gramatikám rozumí, rychle si všimne, že si ty definice tak docela neodpovídají.
thingie avatar 23.1.2008 17:34 thingie | skóre: 8
Rozbalit Rozbalit vše Re: Perlové jsou především nejmocnější
No mně by hlavně nenapadlo, že na něco takovýho můžu poštvat nějaké regulární výrazy. Takže je možná hezký, že to umí víc, ale jak to mam vědět :-)
Růžové lži.
zoul avatar 23.1.2008 17:38 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: Perlové jsou především nejmocnější
To je fakt. man perlre každý den dvakrát před spaním :)
23.1.2008 11:22 depka
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
(str|pwd) # Odpovídá řetězci str nebo pwd.

nemelo by to byt radej: (str)|(pwd) ?
David Watzke avatar 23.1.2008 11:36 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Ani ne.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
zoul avatar 23.1.2008 12:39 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: Regulární výrazy
Viz man perlre:
The first alternative includes everything from the last pattern delimiter (“(”, “[”, or the beginning of the pattern) up to the first “|”, and the last alternative contains everything from the last “|” to the next pattern delimiter. That’s why it’s common practice to include alternatives in parentheses: to minimize confusion about where they start and end.
23.1.2008 13:30 b*d | blog: b_d
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
nevite ja dostat perlre do vim?
23.1.2008 14:05 Ondrej Skutka | skóre: 1
Rozbalit Rozbalit vše Re: Regulární výrazy

Nevím, jestli je to perlre, ale můžete zkusit použít \v ve vyhledávaném řetězci. Více viz :help magic

23.1.2008 16:35 I
Rozbalit Rozbalit vše Re: Regulární výrazy
Vzdyt je to prece PCRE (Perl Compatible Regular Expressions) a Vim samozrejme podporu ma, vizte tip #393 http://www.vim.org/tips/tip.php?tip_id=393
spenat28 avatar 23.1.2008 21:41 spenat28 | Loc: 53.422224, -1.967178
Rozbalit Rozbalit vše doplnil bych do článku
Odpovědět | Sbalit | Link | Blokovat | Admin
Velmi užitečné [[:<:]]slovo[[:>:]]. Skoro nikde to není napsané ač o regulárních výrazech už vyšlo článků ...
[spenat28][Štěpán_Mácha]
David Watzke avatar 23.1.2008 21:52 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: doplnil bych do článku
Co to dělá? Není to standardní regulární výraz, jelikož poslední egrep říká Nepřípustný název třídy znaků. Perlová specialita?
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
24.1.2008 00:29 Ash | skóre: 53
Rozbalit Rozbalit vše Re: doplnil bych do článku
Hranice slov se často užijí třeba ve vim ve formě \<slovo\>.
24.1.2008 00:30 Ash | skóre: 53
Rozbalit Rozbalit vše Re: doplnil bych do článku
Neboli když hledá člověk proměnnou i, tak lépe /\<i\> než /i. Pokud tedy zrovna nepoužije * # nebo gd a podobné.
24.1.2008 01:04 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Rozšířené regulární výrazy

...Bash je nepodporuje
man bash: An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered an extended regular expression and matched accordingly.

Zatvorky {,} zvladaju aj basic regexpy, len sa musia escapovat pomocou \, inak su to obycajne znaky. V extended regexp presne naopak. Uplne rovnako je to aj s (, ), ? a +. Vsetky su zvladane aj v BRE ak su escapovane.

Vsetko je popisovane spravanie grepu a sedu a grep -E a sed -r.
If you hold a Unix shell up to your ear, you can you hear the C.
25.1.2008 12:24 Daniel Novotny | skóre: 3
Rozbalit Rozbalit vše Re: Regulární výrazy - echo /etc/fstab
Odpovědět | Sbalit | Link | Blokovat | Admin
místo "echo /etc/fstab" v posledním příkladu má pravděpodobně být "cat /etc/fstab", ne?
David Watzke avatar 25.1.2008 13:58 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy - echo /etc/fstab
Ne, takovou věc bych nikdy nenapsal :-) Ale někdo se toho koukám chytnul a změnil to...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
25.1.2008 14:02 Daniel Novotny | skóre: 3
Rozbalit Rozbalit vše Re: Regulární výrazy - echo /etc/fstab
jo, pravda... neuvědomil jsem si kontext, pardon
25.1.2008 18:56 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Trochu zákeřné:
bash$ sed -n -e "s/^\([A-Z]\)$/\1/p" <<<a
a
obzvlášť ve formě
bash$ sed -n -e "s/^.*\([A-Z]\).*$/\1/p" <<<Aa
a
versus
bash$ sed -r -n -e "s/^.*([[:upper:]]).*$/\1/p" <<<Aa
A
Jinak bash umí i extended regexp.

bash$ [[ a =~ ^[A-Z]$ ]] && echo matches
matches

bash$ [[ a =~ ^[[:lower:]]$ ]] && echo matches
matches

bash$ [[ a =~ ^[[:upper:]]$ ]] && echo matches


David Watzke avatar 25.1.2008 19:05 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
Hmm, tak ten bash jsem si měl nejdřív zkusit, to jsem netušil...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
25.1.2008 20:12 jakub
Rozbalit Rozbalit vše Re: Regulární výrazy
Odpovědět | Sbalit | Link | Blokovat | Admin
Aky regexp mam pouzit v sede, ak chcem trebars v retazci retezec4214 nahradit vsetky znaky e znakom y?

$ echo "retezec4214" | sed -r 's/e/y/' nahradi len prvy vyskyt a skonci

dakujem
David Watzke avatar 25.1.2008 20:14 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Regulární výrazy
(Všimni si toho g na konci.)
echo "retezec4214" | sed 's/e/y/g'
Toto není regulární výraz, mimochodem.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
25.1.2008 21:07 jakub
Rozbalit Rozbalit vše Re: Regulární výrazy
jasne, islo mi len o to g na konci...

ja myslim, ze 'e' je regularny vyraz, sice primitivny, ale je to slovo regularneho jazyka :-)

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.