Portál AbcLinuxu, 10. května 2025 05:27

Dotaz: Reg. výrazy

27.4.2012 15:49 Dušan S.
Reg. výrazy
Přečteno: 312×
Odpovědět | Admin
Zdravím, jelikož se v tomto směru vůbec neorientuji, obracím se na vás s prosbou o napsání reg. vyrazu který by vybral část řetězce a to tak, že od začátku (zleva) až do prvního výskytu '---' (taky zleva). text od začátku až po '---' obsahuje všechny znaky včetně českých znaků a číslic. Pomohl by mi prosím někdo? Díky moc
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.4.2012 16:04 NN
Rozbalit Rozbalit vše Re: Reg. výrazy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takto ?
sed s/---.*//
NN
Tarmaq avatar 27.4.2012 17:11 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Reg. výrazy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mohl bys to prosim trochu rozvinout? Co znamena "obsahuje vsechny znaky"? Nejlepsi bude, kdyz uvedes nejaky retezec a v nem oznacil tucne tu cast, ktera se ma vybrat. Pripadne jeste druhy pripad, kde to ma selhat.
Don't panic!
27.4.2012 19:12 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Reg. výrazy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Obyčejný regulární výraz vybere i ty tři pomlčky na konci, ty pak budete muset odstranit dodatečně:
^.*?---
Pokud můžete použít Perlovská rozšíření regulárních výrazů, konkrétně vyhlížení, použijte:
^.*?(?=---)
Regulárnímu výrazu pak bude odpovídat jen ten text před pomlčkami.

Syntaxe regulárních výrazů se liší, někde bude potřeba tu hvězdičku a otazník escapovat zpětným lomítkem. Taky si nejsem jist, zda "syté" regulární výrazy (*?, znamená to, že je snaha najít co nejkratší shodu) fungují všude.

^ znamená začátek řetězce, . jakýkoli znak, * libovolný počet opakování (0 až nekonečno, + by znamenalo 1 až nekonečno), ? za * změní režim z hladového na sytý (hladový hledá nejdelší shodu, sytý nejkratší). Výraz (?=...) znamená vyhlížení, tj. porovnává se shoda další části textu, ale ta už se nepovažuje za součást nalezené shody.

Ze vstupu
lasj---asklhgd
tedy první výraz vrátí
lasj---
druhý pak
lasj
27.4.2012 19:37 kolcon | skóre: 15 | blog: kolcon
Rozbalit Rozbalit vše Re: Reg. výrazy
Odpovědět | | Sbalit | Link | Blokovat | Admin
jestli spravne chapu zadani, tak treba

use strict; use warnings; use 5.010;

my $text = 'erwerefsdfsdfsdf---sfdsf';

$text =~ s/^(.*?)---/$1/;

say $text;
27.4.2012 19:44 kolcon | skóre: 15 | blog: kolcon
Rozbalit Rozbalit vše Re: Reg. výrazy
resp. jinak, ale urcite by to slo jeste zoptimalizovat

use strict; use warnings; use 5.010;

my $text = 'erwerefsdfsdfsdf---sfdsf';

($text) = $text =~ /(.*?)---/;

say $text;

Josef Kufner avatar 28.4.2012 00:01 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Reg. výrazy
Odpovědět | | Sbalit | Link | Blokovat | Admin
V PHP toto lze docílit pomocí preg_match_all, kterým si rozložíš řetězec na části podle regulárního výrazu (v tvém případě "/---/") a pak si z pole vybereš ty, které tě zajímají.
Hello world ! Segmentation fault (core dumped)
mess avatar 28.4.2012 00:11 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Reg. výrazy
Nebo se vykašlat na nějaké reguláry a zavolat normálně split nebo explode a vzít si první položku z toho pole, co to vyplivne.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.

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.