regex.h

Fórumok

Üdv!
Minta illesztéssel kapcsolatban szeretnék segítséget kérni:

regex.h-val megoldható, hogy tetszőleges számú darabba vágja szét a regexec() a bemeneti sztringet?
pl:
regcomp(&comp,[??],REG_EXTENDED);
regexec(&comp,"/usr/share/amsn/lang[..stb]",32,regex_tomb,0);
[??] helyére, milyen kifejezést kell írnom, hogy a regexec paramétereitől függetlenül, minden mappanevet külön kigyűjtsön?

A válaszokat előre is köszönöm!

Hozzászólások

Ehhez minek regex? strtok(3).
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Nem értem igazán a kérdést. Ott van a tömböd, amibe max. annyi eredményt kapsz, amennyit megadsz előtt (jelen esetben 32). Ha nincs elméleti felső korlát az egyezésekre, vagy nem tudod mekkora, akkor pedig ciklusban mindig egy találatra hívod és utána a következő iterációban csak a találat végétől az eredeti sztring végéig nézed. A BSD-s grep is így működik:
http://p4db.freebsd.org/depotTreeBrowser.cgi?FSPC=//depot/projects/soc2…

(util.c -ben van ez a konkrét rész)

Válaszoltam a kérdésedre? Vagy mást szerettél volna megtudni?

Igen ez jó ötlet...
Eredetileg, a regex() a kivágásoknál a '(' ')' -k közé foglalt egységeket vagdalja külön. Ezzel az a baj, hogy ilyenkor a programozónak mindig tudnia kell, hogy hány részre tördelendő bemenetet kap.
Engem az érdekelt volna, hogy rá lehet-e kényszeríteni a regexec()-t egy megfelelő mintával arra, hogy ezt ő oldja meg. -Tudod a jó programozó lusta :P -

Fontos, hogy a klasszikus regex.h-val tedd? Van egy olyan sejtesem - bar reg hasznaltam mar c-bol, leginkabb scriptnyelvekbol hivom, hogy a PCRE tud ilyet (preg_split).

A PCRE tobbet tud, mint a hagyomanyos, emiatt kenyelmesebb is, es a tapasztalat azt mutatja, hogy meg gyorsabb is az illesztes.

--
"You will have to look a long way before you find a bunch of scum-suckers more greedy, humourless and deserving of death than the suits in the music business." - Terry Pratchett

PCRE nem POSIX regex, hanem Perl szintaxisú. Ez tudtommal kevés esetben jelent eltérést, de van eltérés.

Az, hogy a PCRE gyorsabb-e az attól függ minél. A regex.h az önmagában egy POSIX standard és egyáltalán nem biztos, hogy mindenki glibc-t használ.

Amúgy regex.h nem tud ilyet, de a ciklusos megoldással, amit írtam írsz rá egy wrappert, ami ad egy pointert a találatokkal meg egy int értéket a találatok számával és meg is van.