[ domaci_a_nas @ 22.10.2009. 17:32 ] @
Poštovanje,

imam problem pošto parsujem fajl u želji da smestim metode klase u bazu. Problem je što postoji promenljiva koja se zove $function. Kako da napišem regular expression koji će matchovati reč function, ali ne i $function i ne "function i neće matchovati junction? Molim vas samo proverene varijante, a možete proveriti svoje expressione na stranici http://www.functions-online.com/preg_match.html
[ Nikola Poša @ 22.10.2009. 18:04 ] @
Ako se ne varam, ovako ćeš dobiti niz sa imenima svih metoda u nekoj klasi:
Code:
preg_match_all('/function\s([a-z0-9_]+)/i', $text, $matches);
$methods = $matches[1];

E sad ne znam dal' tebi trebaju samo imena, ili možda i cela definicija funckije, parametri, itd.
[ domaci_a_nas @ 22.10.2009. 18:14 ] @
Meni nije problem da izdvojim naziv funkcije, problem mi je jedino expression koji neće okidati na $function ili "function, već samo na function, eventualno space ispred te reči.
[ Nikola Poša @ 22.10.2009. 19:35 ] @
A šta ćeš sa public, protected i private klauzulama ispred "function"? Mislim da bi ovaj pattern trebao da odradi posao:
/(public\s|protected\s|private\s)?function\s([a-zA-Z0-9_]+)\s*\(.*\)\s*\{.*\}/Us
[ domaci_a_nas @ 22.10.2009. 20:03 ] @
Ne bih da te naljutim, ali rekoh, sme da stoji space ispred function, a posle static, public i private uvek ide space Tačnije, da budem jasan, space je jedini znak koji sme da se pojavi ispred function. Word boundries ne pomaže, pošto i on znak $ tumači kao delimiter između reči, tako da sam zbunjen skroz. Imam varijantu da napišem '/^[\s|\t][public\s|static\s|protected|public static\s|static public\s]?function/', ali mi se ne dopada previše ta varijanta... Hteo sam nešto kompaktnije, ali dobro, poslužiće i ovo.
[ Nikola Poša @ 22.10.2009. 20:22 ] @
Citat:
domaci_a_nas: a posle static, public i private uvek ide space

Pa znam, zato sam i stavljao znak "\s" na kraju svake od tih ključnih reči. Ti onda možeš da dodaš još jedan uslov pored ta tri, ovako: public\s|protected\s|private\s|\s.

Sad sam baš testirao ovaj pattern na jednoj klasi, i radi ok.
[ kazil @ 22.10.2009. 20:50 ] @
A da koristis ovu funkciju? http://www.php.net/manual/en/function.get-class-methods.php :)
[ domaci_a_nas @ 22.10.2009. 20:54 ] @
Nikola Poša, testiraj svoj pattern na subjektu $function, matchovaće i taj, a ja to ne želim. kazil, hvala ti puno za ovu funkciju, ali je upisivanje u bazu samo deo zadatka, moram da parsujem file.
[ Aleksandar Ružičić @ 22.10.2009. 20:54 ] @
ovo bi trebalo da ti matchuje funkcije: /\s+function\s+([a-z_][a-z_0-9]*)\s*\(/i

ali bih ti ja preporucio da koristis ili get_class_methods ili Reflection klase (sa get_declared_classes mozes da uzmes listu svih deklarisanih klasa prilikom izvrsavanja skripte, ako to moze da ti pomogne...)
[ domaci_a_nas @ 22.10.2009. 21:01 ] @
Šta ako meni u redu piše samo function, onda \s+function ne matchuje. Ako staviš \s?function onda će matchovati $function. Moram da parsujem file, baš moram na taj način da punim bazu, a sem toga, jako me zanima da naučim taj regular expression u ovom konkretnom slučaju. Znači treba mi da jedino slovo koje dolazi ispred reči function bude isključivo space. Word boundaries ne radi.
[ Nikola Poša @ 22.10.2009. 21:07 ] @
Pa ne možeš samo po tome da se vodiš, jer onda bi ti možda match-ovao i neki tekst komentara koji unutar sebe ima reč "function", ovako nešto:
Code:
/**
 * Neki tekst komentara i unutar njega rec function. 
 */

A i kako misliš "na subjektu $function"? Ako si mislio na člana klase, probao sam i to, stavo sam promenljivu koja se zove "function", i nju taj pattern nije match-ovao...
[ domaci_a_nas @ 22.10.2009. 21:16 ] @
Tvoj pattern neće matchovati ni reč function ni $function nego samo space i function. Ne zalazim u komentare, u parseru sam to podesio.
[ Man-Wolf @ 23.10.2009. 08:32 ] @
A da das ti nama kod na kome testiras (ili ti klasu, sta god ...) ? Evo ja sam sad probao ovaj Nikolin kod i radi sasvim korektno.
[ domaci_a_nas @ 23.10.2009. 15:24 ] @
Kod nije bitan, imate ovu stranicu http://www.functions-online.com/preg_match.html, unesite lepo taj njegov pattern, pa onda u subjektu samo reči $function, pa zatim function, ako bude matchovao function a ne $function ja to prihvatam.