Portál AbcLinuxu, 7. května 2025 19:25

Dotaz: Bordel v regulárních výrazech ve Vimu

10.6.2010 17:13 dejvik | skóre: 12 | blog: vysatost
Bordel v regulárních výrazech ve Vimu
Přečteno: 296×
Odpovědět | Admin

Ahoj, regularní výrazy(regexpy) jsou super a snažím se je využívat, když to jde (moc často to není:)). Ale trošku mě rozčílila menší nekonzistence v escapování speciálních znaků.

Příklad:
/[b-f]/
/[^cs]ow/

Doposud v pořádku. Znaky [^-] jsou speciální znaky pro regexpy. Když je budu chtít použít doslova dám před ně lomítko.

Aa tady to začíná:
/o\+i/

'+' je zase znak pro regexpy se spec. významem, ale musím před něho dát lomítko. Proč?

A hnusný mix:
/[a-c]t*o\+i/

Jak mám přátelé poznat, před co dát lomítko a před co ne? Má to souvislost s rozšířenými regexpy? Jestli jo, tak nejde to přepnout do konzistentního stavu a udělat z toho bordelu něco normálního? Mě nezajímá, které regexpy používám. Buď budu dávat všude lomítko nebo ne. Jestli to má nějaký vyšší význam, rád se poučím.

Pěkný tutoriál, ze kterého vycházím: http://vim.runpaint.org/searching/creating-regular-expressions/

Díky a přeju hezký den:)

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

Odpovědi

10.6.2010 17:32 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bordel v regulárních výrazech ve Vimu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak mám přátelé poznat, před co dát lomítko a před co ne?

Zkušeností? Používejte reg. výrazy častěji... Není to tak složité, u základních reg. výrazů se escapují závorky () {} a u sed a vim navíc ještě +. To plus je asi nejvíc matoucí... I já na něj občas zapomenu.
\(foo\)*\(bar\)\+\(baz\)\{3\}
vs
(foo)*(bar)+(baz){3}
Rozšířené regulární výrazy jsou co do escapování trochu hezčí, jejich používání ve vimu by asi šlo pomocí pluginu eregex.vim (nezkoušel jsem) nebo něčeho podobného.
10.6.2010 17:35 dejvik | skóre: 12 | blog: vysatost
Rozbalit Rozbalit vše Re: Bordel v regulárních výrazech ve Vimu
díky za odpověď

Pamatovat si () {} + není tak hrozné, ale proč mě tak trápí?
10.6.2010 20:22 dejvik | skóre: 12 | blog: vysatost
Rozbalit Rozbalit vše Re: Bordel v regulárních výrazech ve Vimu

Teď se dívám na eregex.vim a perldo a rubydo vypadají velice dobře. Škoda jen, že tam není ukázané, jak se s tím vyhledává v textu (ne nahrazuje), abych si mohl hezky zvýraznit hledaná slova. Ale to už chci asi moc :-)

10.6.2010 17:35 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Bordel v regulárních výrazech ve Vimu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nedobře se na to díváte :-) V syntaxi regulárních výrazů, kterou popisujete, není „+“ znak se speciálním významem, ale naopak je to zcela obyčejné plus. Vedle toho pak existuje sekvence „\+“, která má speciální význam. A jak to máte poznat? Jednoduše se podíváte do nápovědy. Tam bude určitě napsáno, že speciální znak „[“ má nějakou funkci, a speciální sekvence „\+“ má zase jinou funkci. A všechno ostatní, co tam není vyjmenované, jsou obyčejné znaky, které se použijí tak, jak je napíšete.
10.6.2010 17:55 dejvik | skóre: 12 | blog: vysatost
Rozbalit Rozbalit vše Re: Bordel v regulárních výrazech ve Vimu
Už se dívám do helpu. Ale stejně mi nic nevysvětlili. Prostě Používej lomítko pro tamto a šmitec.
Teď vím, že mám dávat lomítko před ( ) { | + = a character classes, když chci speciální význam. Pořád mi přijde, že v tom je bordel.
10.6.2010 18:07 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Bordel v regulárních výrazech ve Vimu
Není v tom bordel. Existují sekvence znaků se speciálním významem, například „[“, „\{“, „\+“. Nesmíte se na to lomítko tak upínat – prostě může být součástí některých sekvencí se speciálním významem. Takže to není „lomítko před ( ) { | + … když chci mít speciální význam“. Správně to je „sekvence \( \) \{ \| \+ … mají speciální význam“.
10.6.2010 18:44 dejvik | skóre: 12 | blog: vysatost
Rozbalit Rozbalit vše Re: Bordel v regulárních výrazech ve Vimu
Dá se na to takhle dívat. Ale vyžaduje to si více pamatovat. Budu to muset asi skousnout.
Petr Bravenec avatar 11.6.2010 13:12 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Bordel v regulárních výrazech ve Vimu
Nekousat. Pamatovat.
Petr Bravenec - Hobrasoft s.r.o.

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.