2011-11-24 6 views
7

Poszukuję sposobu wyodrębnienia X liczby słów po obu stronach danego słowa w wyszukiwaniu.Wyodrębnij X liczbę słów otaczających dany ciąg wyszukiwania w ciągu znaków

Na przykład, jeśli użytkownik wprowadzi słowo "więzień" jako słowo wyszukiwania, a zapytanie MySQL znajdzie wpis zawierający "więzień" w treści wpisu, chciałbym zwrócić nie całą zawartość tego wpisu, ale po prostu x liczba słów po obu stronach, aby podać użytkownikowi istotę postu, a następnie mogą zdecydować, czy chcą kontynuować czytanie i przeczytać go w całości.

Używam PHP.

Dzięki!

+0

Może to również pomóc: http://stackoverflow.com/q/1436582/1066234 –

Odpowiedz

8

Możesz nie być w stanie w pełni rozwiązać ten problem z regex. Istnieje zbyt wiele możliwości innych znaków między słowami ...

Ale można spróbować tej regex:

((?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}) 

Zobacz tutaj: rubular

kupili także wykluczyć pewne znaki, gdyż nie są liczone jako słowa. Teraz regex zlicza każdą sekwencję znaków spacji, które są otoczone spacjami jako słowo.

pasujące tylko prawdziwe słowa.

((?:\w+\s*){0,5}<search word>(?:\s*\w+){0,5}) 

Ale tu każdy bez znaków słowo (. "Itd) Hamulce Dopasowanie

więc można iść na ...

((?:[\w"',.-]+\s*){0,5}["',.-]?<search word>["',.-]?(?:\s*[\w"',.-]+){0,5}) 

To również pasuje do 5 słów z jednym z "", .- wokół szukanego terminu.

Aby go użyć w PHP:

$sourcestring="For example, if a user enters \"inmate\" as a search word and the MySQL"; 
preg_match_all('/(?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}/s',$sourcestring,$matches); 
echo $matches[0][0]; // you might have more matches, they will be in $matches[0][x] 
+0

Aby dodać odpowiedź morja, w ty może wybrać ciąg z MySQL z PHP preg_match: http://php.net/manual/en/function.preg-match.php. – bozdoz

+0

Dzięki, wypróbuję je, kiedy będę miał okazję później. Doceniam czas, jaki podjąłeś, aby odpowiedzieć na to pytanie! –

+0

Próbowałem go, czasami działa na Rubular ... Hmmm ... Próbowałem go zaimplementować w PHP i nie mogę tego objąć ... Czy ktoś może wskazać mi właściwy kierunek? –

1

Chciałbym użyć tego wyrażenia regularnego dla PHP, które także zajmuje znaków UTF8 uwzględnieniu

'~(?:[\p{L}\p{N}\']+[^\p{L}\p{N}\']+){0,5}<search word>(?:[^\p{L}\p{N}\']+[\p{L}\p{N}\']+){0,5}~u' 

w tym przypadku „~” jest separator i modyfikatora "u" na końcu wskazuje, że wyrażenie regularne jest interpretowane w UTF8.

proszę zobaczyć dokumentację na temat identyfikatorów REGEX Unicode tutaj:

http://www.regular-expressions.info/refunicode.html

Powiązane problemy