shreker
17.07.2015, 22:47:25
Najprościej znaleźć określone słowo w stringu przy pomocy strpos, ale ta funkcja w przykładowym stringu np : "Jakieś przykładowe zdanie z wyszukiwanym_wyrazem w tekście i innym wyrazem." jeżeli szukamy słowa "wyrazem" wyświetli nam zarówno "wyrazem" jak i "wyszukiwanym_wyrazem" a chodzi o to żeby znaleźć tylko słowo "wyrazem".
Mam więc pytanie czy da się to zrobić bez wyrażeń regularnych - przy pomocy funkcji?
Sprawa jest o tyle utrudniona, że muszę przeszukać kilka plików pod kątem występowania określonych słów (z array), mam już gotową pętlę, ale wystąpił powyższy problem.
thek
17.07.2015, 23:19:54
Może sprawdź jaki jest znak na pozycji wcześniejszej, o ile jest większa od 0. No i dla pewności także za ostatnią literą wyrazu
KsaR
18.07.2015, 01:58:42
#1:
if (false!==stripos($string,' '.$word) ||false!==stripos($string,$word.' ')) # @skie, edit... Pierwsze co teraz wstałem i pomyślałem o tym.
{
# ...
}
# 2:
$stringArr=explode(' ',mb_strtolower
($string,'UTF-8')); /* to powinno być za pętlą, gdzieś odrazu za zmienna z textem */ {
#...
}
Nie testowałem ale powinno działać.
$string - string w którym ma szukać.
$word - aktualne słowo.
Skie
18.07.2015, 06:41:27
@ksar Twoje rozwiązanie niestety jest błędne - wyraz "wyszukiwanywyraz" z przykadłowego zdania z pierwszego postu zostanie znalezione, bo po "wyraz" jest spacja. Dobry rozwiązaniem jest to, które opisał @thek, aczkolwiek z drobną zmianą - szukamy "wyraz", bez spacji ani niczego, następnie sprawdzamy znak przed i po, by znaleźć char inny niż [a-zA-Z] + polskie znaki, ponieważ nie tylko spacja, ale również tabulacja lub znaki przestankowe mogą tam się znaleźć. Jeśli warunek zostanie spełniony, wtedy znaczy, że jest to osobny wyraz, jeśli nie jest częścią czegoś większego.
thek
18.07.2015, 11:23:46
@Skie ma rację. Zapomniałem o tym napisać w swoim poście. Musisz wziąć pod uwage polską gramatykę i interpunkcję by możliwe przypadki zawrzeć/wykluczyć. Wyrażenie regularne byłoby prostsze by te warunki przed i po określić, ale skoro nie możesz, to musisz wpierw określić "otoczenie" wyrazu w jakim się może znaleźć w zdaniu.
thek
18.07.2015, 12:23:06
Albo brak obsługi pcre na serwerze, bo ktoś miał taki kaprys i skompilował takie cudo. Ewentualnie ustawił te funkcje jako niedostępne
memory
18.07.2015, 13:06:47
jak będzie wyglądał RegExp ?