Autor Zpráva
phobos9007
Profil
Zdravím,
Neví prosím někdo, proč mi
preg_match("/\.{2,}/","test.localhost.cz")
vrací false?
Děkuji
Kajman_
Profil *
Protože v tom řetězci nejsou dvě tečky po sobě.
AM_
Profil
Zkus to takhle:
if (preg_match_all("/\./","test.localhost.cz") >= 2) ...

Nebo ještě lépe bez regulárů přes substr_count()
phobos9007
Profil
AM:
Moc díky, všude se píše "opakování znaků" ale nikde jsem snad neviděl, že musí následovat hned po sobě.
Jinak máš tam drobnou chybu,
preg_match_all
vyžaduje min. tři parametry.
if (preg_match_all("/\./","test.localhost.cz",$shody) >= 2) ...
AM_
Profil
Jo, takovýhle detail jsem nestudoval :) stejně, raději to dělej přes ten substr_count, regulární výrazy jsou zde naprosto zbytečné. Jen jsem chtěl ukázat, jak by se přes ně podobná věc (spočítání celkových výskytů) dala dělat.
phobos9007
Profil
To je dobrý, hlava je na nápady, na phpko je manuál :) Ještě bych se tě rád zeptal, proč si myslíš, že je na tohle lepší
substr_count
?
nightfish
Profil
phobos9007:
Ještě bych se tě rád zeptal, proč si myslíš, že je na tohle lepší
v tomto konkrétním případě je to lepší, protože to je rychlejší (regulární výraz se musí rozparsovat a pak se provádí simulace přijetí řetězce, zatímco u substr_count to vyhledává jen pevně dané podřetězce)
pokud bys potřeboval vyhledat podřetězce různé podoby (např. abc, abbc, abbbc, ...), bylo by naopak vhodnější použít regulární výrazy
AM_
Profil
phobos9007:
Ještě bych se tě rád zeptal, proč si myslíš, že je na tohle lepší
Ze stejného důvodu, jako nebudeš zabíjet komára plamenometem: počítáš výskyty podřetězce, tak použij funkci, která je k tomu určená (a v dobré víře také optimalizovaná), a nemusíš spouštět složitý engine regulárních výrazů, který je určený pro mnohem složitější problémy.

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: