Autor Zpráva
Anonymní
Profil *
Dobrý den, je možné pomocí regulárního výrazu získat data z následujícího řetězce?

"bar: * qux: fiz foo: bar, baz"

Výsledek:
bar: *
qux: fiz
foo: bar, baz
Alphard
Profil
To vaše nahrazení bar, qux... rozbilo pochopitelnou strukturu. Jsou bar, qux, foo konstantní? Pokud ano, bylo by to snadné.
Pokud ne, chytil bych se dvojteček, ale zase je otázka, jestli se mohou objevit i v řetězci samotném.
Tori
Profil
Pokud dvojtečky nemůžou být uvnitř hodnot, funguje např. tohle. Ale nelíbí se mi to, mělo by to jít napsat pěkněji.
$string = "bar: * qux: fiz prazdnyKlic: foo: bar, baz";
$re = '~(\w+):((?:\s[\w*]+,?)*)(?![:\w])~';
preg_match_all($re, $string, $m, PREG_SET_ORDER);
var_dump($m);

edit: Další možnost je převést to na nějaký std. formát, např. JSON:
$string = "bar: * qux: fiz prazdnyKlic: foo: bar, baz";
$string = '{'.trim(preg_replace('~(\w+):\s*(.*?)\s*(?=\w+:|$)~', '"$1": "$2",', $string), ', ').'}';
var_dump(json_decode($string));

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: