Vim keresési probléma

 ( opr | 2009. október 20., kedd - 11:49 )

Sziasztok!

Lenne egy nagyon aranyos feladat, amit meg kellene oldanom, de a megoldásra még sajnos nem jöttem rá, így a segítségeteket kérem! :(

A feladat szövege a következő:

"A mellékelt szövegben távolság, idő, és tömeg mennyiségek szerepelnek, pl.
3; 5 km. A mennyiségek a következő részekből állnak: Egy szám, melyben
szerepelhet legfeljebb egy tizedes vessző. A tizedesvessző után nulla vagy
több számjegy állhat még. Ezt egy szóköz követi, majd legfeljebb egy
el®tag, (pl. kiló- (k), mili- (m), vagy nano (n)), és végül egy mértékegység
(m, s, vagy g). Nyissuk meg a szöveget Vim-mel és keressük meg az összes
mennyiséget, amelyre illik a fenti minta."

A mellékelt szöveg lehet tetszőleges, a fenti a paraméterekkel!

Előre is köszönöm a segítséget!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Hát ha tanulni akarsz belőle, akkor legjobb ha te magad csinálod meg. Írd be googleba, hogy "vim regular expressions".

Minden leírt tagnak egyszerű a regexpes megfelelője, sorrendben egymás mögé írod:
- "1 vagy több" számjegy
- "1 db" szóköz "VAGY" "1 db" vessző majd "0 vagy több" számjegy majd "1 db" szóköz
- "0 vagy 1" előtag [kmn]
- "1 db" mértékegység

már csak az "1 vagy több", "0 vagy 1", "1 db", "0 vagy több" regexpes megfelelőjét kell kikeresned, és a "VAGY" operátort.

a szám [0-9]
a tizedes pontot escape-ld ki \.
az egy vagy több valami esetén a * a nyerő
a space-t szintán ki kell escape-lni
a betű [a-z] abiből kettő van egymás mögött a mintában

érted?!

most már nagyon nagyon nagyon sokat segítettünk

az 'egy vagy tobb' az nem * hanem +
amugy tenyleg nem nagy cucc a feladat, gyakorlatilag le kell irni regexp-kent azt, amit elmondtal rola, nem olyan nehez az...

a + az kiterjesztett regexp, amit a vim nem tud (és nem is akar tudni), tehát a * kell,
golgota nem azt mondta hogy "1vtöbb" az a *, hanem hogy azt kell használni, tehát jól mondta :P

Nem vagyok se regex, se vim guru, így fogalmam sincs, hogy hol kezdődik a kiterjesztett regexp, de az biztos, hogy az épp kéznél lévő vimben szépen megy a +.

jé tényleg :) nem tudom mivel kevertem akkor, lehet mert escapelni kell

Figyelem! Alább a cselekmény részletei következnek, akár a végkifejlet is szerepelhet!

:D

[0-9]+(\.[0-9]*)?\ [kmn]?[msg]
vim számára escape-elve:
[0-9]\+\(\.[0-9]*\)\?\ [kmn]\?[msg]

~~~~~~~~
De ezt az egy lépést ki nem tevé,
Az nem tett semmit, nem tud semmit is.