Autor Zpráva
stig09gy
Profil *
Ahoj. Potřebuju čistě v php nějak porovnat 2 řetězce, kde shodné řetězce jsou i
"re*z?c" = "retezec"

* nahrazuje libovolný počet znaků, ? jeden znak. Musí to fungovat stejně jako v mysql "`sloupec` LIKE 're%z_c'", ale neboť nepracuju s databází, nemohu to na ni delegovat. Jako první mě napadlo napsat regulární výraz, ale tam by mohlo docházet ke kolizi řetězců a také neznám předem počet zástupných znaků. Jak takové řetězce tedy porovnat? Pokud jsem hledal správně, tak php není přímo fce který by s tímto počítala.
motik
Profil
if (preg_match('/^re(.*)z(.)c$/', 'retezec', $out)) ...
stig09gy
Profil *
stig09gy:
by mohlo docházet ke kolizi řetězců a také neznám předem počet zástupných znaků.
V tomto konkrétním případě to fungovat bude. Ale co pokud bude řetězec "*" nebo "**§3č\dad.*??(./^$" nebo podobná zrůdnost? Totiž jako první bych musel nějak vytvořit z řetězce řetězec pro preg_match a tam pokud budu vstupní řetězec backspacovat, tak mohu omylem backspacovat to co nechci apod.
motik
Profil
nejsu si jistej, ale pokud nevíš, co jsou zástupný znaky a co znaky vyjadřující samy sebe, tak ti na to žádná funkce nepomůže - prostě to nějak určí, ale jistotu tam mít nemůžeš..
stig09gy
Profil *
Zástupné znaky: * ?
Hvězdička: **
Otazník: *?
Všechny ostatní znaky jsou normální.
motik
Profil
tak pokud je to tak, tak by mělo jít jen ty znaky ponahrazovat a je to, né?
$vyraz = str_replace("**", "\*", $vyraz);
stig09gy
Profil *
Tady nejde ani o mé speciální znaky ale o speciální znaky fce preg_match. Těch bude hodně a bude těžké je správně všechny odescapovat.
motik
Profil
rád bych ti pomohl víc, ale když se ti do toho nechce, tak proč bych ti to měl dělat já? :-P
Kcko
Profil
Těch bude hodně a bude těžké je správně všechny odescapovat.

preg_quote
motik
Profil
ale to ti nahradí všechny, né?
stig09gy
Profil *
Na preg_quote jsem úplně zapomněl. Díky moc, ten řetězec skrz to proženu, pak najdu escapované * a ? a vyrobím z toho časti reg.výrazu a potom to celé zabalím do reg. výrazu.

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:

0