Zadejte hledaný výraz...

Regulární výraz, použít?vytažení posledního údaje ze stringu)

Ondřej Záruba
verified
rating uzivatele
27. 8. 2011 19:55:23
Zdravím,
mám tu jednu věc u které si nejsem vůbec jistý správným postupem.
Mám řetězec
$text = "Nějaký dlouhý_retezec.s.nejakým_úplně-šíleným $formátováním.hruza";
a já potřebuji vždy z toho řetězce vytáhnout poslední údaj za poslední tečkou nehledě na to co tam bude za text. Vždy najít poslední tečku a to co je za ní uložit někam vedle.
Řešení mám udělané pomocí pole. Řetězec rozsekám do pole podle . a pak najdu poslední záznam a ten vypíši
$arr = explode(".", $text);
$i = (count($arr)-1);
dump((string)$arr); // vypíše "hruza"
die();
Nedalo by se to elegantněji řešit pomocí reguláru? Bohužel v nich nejsem tak zběhlý a nenapadl mě způsob jak to zapsat, tak jsem si vypomohl polem
---------- Příspěvek doplněn 27.08.2011 v 19:57 ----------
edit: Problém v tomto případě je pokud chci zbytek dat dostat v celku jinam. Přes pole musím potom procházet jednotlivá a zase pomocí implode() rozdělovat tečkou
Výsledný script pak vypadá nějak takto, což nevypadá moc lákavě:
$arr = explode(".", $image);
$f = (count($arr)-1);
$imageType = (string)$arr;
$arr = null;
$arr2 = implode(".", $arr);
$arr2 = substr($arr2, 0, strlen($arr2)-1);
$imageName = $arr2;
27. 8. 2011 19:55:23
https://webtrh.cz/diskuse/regularni-vyraz-pouzitvytazeni-posledniho-udaje-ze-stringu#reply671218
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
27. 8. 2011 20:16:41
a) prvni priklad by sel zapsat i takhle - neptej se me ale proc, bylo by to slozite na vysvetleni (ty dvojite zavorky tam jsou schvalne):
echo end((explode('.', '....hruza'))); //vypise "hruza"
b) pres regulary by to slo, ale vypada to, ze se snazis rozdelit nazev souboru a priponu:
$imageName = pathinfo($image, PATHINFO_FILENAME);
$imageType = pathinfo($image, PATHINFO_EXTENSION);
pokud bys potreboval i cestu (adresar), tak by to vypadalo takhle:
$imageName = dirname($image) . DIRECTORY_SEPARATOR . pathinfo($image, PATHINFO_FILENAME);
27. 8. 2011 20:16:41
https://webtrh.cz/diskuse/regularni-vyraz-pouzitvytazeni-posledniho-udaje-ze-stringu#reply671217
w3m
verified
rating uzivatele
(22 hodnocení)
30. 8. 2011 22:09:58
Napsal vedouci;694555
a) prvni priklad by sel zapsat i takhle - neptej se me ale proc, bylo by to slozite na vysvetleni (ty dvojite zavorky tam jsou schvalne):
echo end((explode('.', '....hruza'))); //vypise "hruza"
Zas tak složité to být snad nemůže :) osobně taky nechápu, jestli to použití dvojitých závorek má nějaký speciální účel ;)
30. 8. 2011 22:09:58
https://webtrh.cz/diskuse/regularni-vyraz-pouzitvytazeni-posledniho-udaje-ze-stringu#reply671216
Václav Mach
verified
rating uzivatele
(13 hodnocení)
30. 8. 2011 22:20:08
regulární výrazy se používají tam kde nestačí klasické funkce pro práci s řetězcem, což opravdu není tento případ.
echo substr($text, strrpos($text, '.')+1)
strrpos, ne strpos !
30. 8. 2011 22:20:08
https://webtrh.cz/diskuse/regularni-vyraz-pouzitvytazeni-posledniho-udaje-ze-stringu#reply671215
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
31. 8. 2011 09:48:11
Napsal w3m;695801
Zas tak složité to být snad nemůže :) osobně taky nechápu, jestli to použití dvojitých závorek má nějaký speciální účel ;)
tak si to vyzkousej :)
end() totiz meni aktualni index predaneho pole (ma side-effect), proto vyzaduje referenci, dvojite zavorky jsou takovy jednoduchy hack, ktery umozni predat neco referenci, ikdyz to nemame ulozene v promenne.
ale pokud to jde, tak je samozrejme lepsi citelnejsi reseni...
(ve smyslu, ze to neni zadna magie)
31. 8. 2011 09:48:11
https://webtrh.cz/diskuse/regularni-vyraz-pouzitvytazeni-posledniho-udaje-ze-stringu#reply671214
w3m
verified
rating uzivatele
(22 hodnocení)
31. 8. 2011 11:06:00
dekuji! :-)
31. 8. 2011 11:06:00
https://webtrh.cz/diskuse/regularni-vyraz-pouzitvytazeni-posledniho-udaje-ze-stringu#reply671213
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
31. 8. 2011 12:20:12
nz ;)
31. 8. 2011 12:20:12
https://webtrh.cz/diskuse/regularni-vyraz-pouzitvytazeni-posledniho-udaje-ze-stringu#reply671212
Pro odpověď se přihlašte.
Přihlásit