PHP preg_match_all - probléma / kérdés

Ez a téma lezárásra került a moderátor által. A lezárás oka: 1 t�ma - 1 k�rd�s
PHP preg_match_all - probléma / kérdés
2011-10-18T19:04:02+02:00
2011-10-18T19:04:03+02:00
2022-11-23T09:41:58+01:00
NagyMarci
Sziasztok!

A következő funkciót szeretném elegánsabbá tenni, egy osztályomon belül (még csak most ismerkedem a reguláris kifejezésekkel):


public function analyzeSource ($input) { $syntax = "/\{(!([A-Za-z0-9-_]*?)|!([A-Za-z0-9-_]*?)\;(\{"([A-Za-z0-9-_]*?)":"([^`]*?)"\}))\}/"; if (preg_match_all($syntax, $input, $result, PREG_SET_ORDER)) { foreach ($result as $i => $res) { $variable[$i]["directContent"] = $res[0]; if (!$res[2]) { $variable[$i]["name"] = $res[3]; $variable[$i]["parameters"] = json_decode($res[4], true); }else{ $variable[$i]["name"] = $res[2]; $variable[$i]["parameters"] = false; } } return $variable; }else{ return false; } }

Működési elv: Alapvetően, hogy egy forrásban keres {!valami} vagy {!valami;{"paraméter":"érték1","paraméter2":"érték2"}} szintaktikai jellemzőkkel rendelkező tartalmakat, és visszatér egy tömbbel ha talál benne. A tömb annyi elemű ahány ilyen elemet talál és egy tömb eleme is tömböket tartalmaz:

Array ( [0] => Array ( [directContent] => {!oldal;{"literal":"true", "lang":"hu"}} [name] => oldal [parameters] => Array ( [literal] => true [lang] => hu ) ) )

Ezzel tér vissza pl ha a következő inputot kapja: "bla bla {!oldal;{"literal":"true", "lang":"hu"}} bla bla bla"

van egy kérdésem, és egy problémám:
- Kérdés: meg tudom e csinálni csak reguláris kifejezéssel, hogy ilyen típusu tömböt adjon vissza, vagy mindenképpen végig kell mennem rajta egy ciklussal, hogy átrendezzem?
- Probléma: nyilván látszik, hogy a paraméterezés json formátumú. viszont az én reguláris vizsgálatom csak akkor engedi át, ha macskakörmök között van az érték, és a név (ez azért van így most, mert kiakadna, ha }- karakter kerülne egy értékbe)
Meglehet oldani, hogy a php-nak egyből vizsgálatok nélkül át lehessen adni pl egy bool típusú változót? Azt figyelembe véve, hogy az értékbe bekerülhet }-karakter is? nyilván akkor csak macskakörmök közé, de ne legyen kizáró ok.

Előre is köszi a segítséget.
Mutasd a teljes hozzászólást!

Ez a téma lezárásra került a moderátor által. A lezárás oka: 1 t�ma - 1 k�rd�s
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd