PHP a problém s preg_match - vyřešeno

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Prkny 25. 1. 2011 11:19

Zdravím, mám řetězec který prohledávám s preg_match, ač by mělo v příkladu vyjít obsahuje, vyjde neobsahuje, kde mám chybu ?
Děkuji.


$retezec = "Barva červená, velikost XS(27-29);Barva červená, velikost XXS(23-26);Barva modrá, velikost XXS(23-26);";

$test_varianty = "Barva červená, velikost XXS(23-26)";

if (preg_match("/$test_varianty/", $retezec))
{echo "ano obsahuje - $test_varianty";}
else {echo "ne neobsahuje";}
Naposledy upravil Prkny dne 25. 1. 2011 11:45, celkově upraveno 1
Prkny
Junior

Odeslat příspěvekod Wikan 25. 1. 2011 11:28

Nemělo by tam čistě náhodou být:
preg_match($test_varianty, $retezec)
?
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Nargon 25. 1. 2011 11:29

Znaky () jsou specialni znaky regularniho vyrazu. Pokud je chces pouzit jako "text" tak je musis escapovat lomitkem \
Barva červená, velikost XXS\(23-26\)
A vzhledem k tomu ze to je php, tak tam aby jsi napsal lomitko, tak ho musis taky escapovat. Takze to pak bude asi takto:
$test_varianty = "Barva červená, velikost XXS\\(23-26\\)";
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod gandor 25. 1. 2011 11:30

zatvorky maju specialny vyznam. Treba ich escapovat... Odporucam pozriet si funkciu preg_quote...
BTW. pokial ti ide o obycajne porovnanie ci je nejaky text v texte, tak substr je aj rychlejsi a aj na toto lepsi...

ps. uz fakt, ze nieco taketo potrebujes na zistenie, ci sa produkt nachadza v retazci indikuje, ze niekde robis nieco velmi zle...

EDIT: Wikan pozri si rozdiel medzi preg a ereg... A ereg je uz deprechated....
Naposledy upravil gandor dne 25. 1. 2011 11:31, celkově upraveno 1
gandor
Mírně pokročilý

Odeslat příspěvekod salko 25. 1. 2011 11:31

buď použi preq_quote($test_varianty, "/") alebo použi jednoduchšie funkcie, napr. strpos.
preg_match je veľmi užitočný nástroj, ale iba v prípade, že ho vieš správne používať.
salko
Mírně pokročilý

Odeslat příspěvekod Prkny 25. 1. 2011 11:45

Pánové všem velice děkuji. Jelikož $test_varianty může být jakýkoliv text, včetně závorek atd, pro mojí potřebu naprosto vyhovuje funkce strpos.
Funkce preg_match je v tomto případě opravdu zbytečná.

Ještě jednou všem díky za Váš čas!
Prkny
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků