Autor Zpráva
Matess
Profil *
Ahoj, potřeboval bych poradit jestli mám tento regulár správně?
preg_match_all("/kdo|koho|komu|koho|o kom|kým/mi",$text,$o,PREG_SET_ORDER)
Měl by ve větě vyhledat zájména a pokud tam jsou, tak vypsat hlášku.

Nevím jestli je to správně, ale když je ve větě kdopak, tak to najde taky. Má to tak být?
Najde to i když je ve větě asdfkdoasdf.

V případě, že to tak být nemá, můžete mi ten výraz upravit tak aby to tak nevyhledávalo?
Děkuji za odpovědi.
midlan
Profil
záleží jestli pak ty zájmena chceš vypsat
jestli ano tak:
if(preg_match_all('~\\s(kdo|koho|komu|koho|o kom|kým)\\s~is', $text, $zajmena)) {
  echo 'zájmena byly nalezeny';
  //nalezená zájmena jsou v poli $zajmena
}
else {
echo 'zájmena nebyly nalezeny';
}

jestli chceš jen vědět jestli se tam nějaké ze zájmen vyskytuje tak stačí:
if(preg_match('~\\s(kdo|koho|komu|koho|o kom|kým)\\s~is', $text) ...
Tori
Profil
ad [#2]: Ještě by šlo místo \\s použít \\b - tak to najde i zájmena na začátku/konci řetězce anebo ta, která mají okolo interpunkci.
midlan
Profil
[#3] Tori
To je pravda, \b jsem zatím nepoužíval, ale dočetl jsem se že hledá na začátku a na konci slova, takže by to mohlo najít npříklad kohout. V tom případě je asi jediná možnost vypsat interpunkční znaménka a začátek a konec řetězce nějak takhle:
'~(?:\\s|\\.|\\?|\\!|^)(kdo|koho|komu|koho|o kom|kým)(?:\\s|\\.|\\?|\\!|$)~is'
Jen nevím jestli jde ten začátek a konec řetězce (^ pro začátek; $ pro konec) použít takhle.
Tori
Profil
midlan:
Jde tak použít. Nicméně \\b je jednodušší způsob, jak napsat zhruba tohle: (?:[\\s.?!,;:-]+|^|$), označuje to hranici slova, kde slovo je cokoli z množiny [a-zA-Z0-9_]+ a možná i některé znaky s diakritikou (nevím jestli podle lokálního nastavení nebo čeho). Zkuste si to. :-)
SpotRudloff
Profil
midlan:
Nechci být Grammar Nazi, ale ta zájmena nebyla nalezena.
Matess
Profil *
Děkuji, nějak se s tím poperu.

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