Bir dize ilk geçtiği önce ve sonra kelimeleri Dönüş

4 Cevap php

Ben bir arama sorgusu döndürülen metnin bir vücuda sahip, $ vücut arama sağlar. Şimdi, ne yapmak istediğiniz komut arama sorgusu ilk geçtiği, $ sorgu bulmak içindir. Ben strripos ile bu ilk örneğini bulabilirsiniz biliyorum.

Bir kere buldum, ben komut ilk geçtiği sonunda dize ilk geçtiği yanı sıra birkaç kelime önce bir deyişle birkaç dönmek istiyorum.

Esasen ben Google, arama sonuçları ile ne yapmaya çalışıyorum.

Ben başlamalıdır nerede herhangi bir fikir? Benim sorun ben kısmi kelimeleri dönen tutmak olmasıdır.

4 Cevap

Şunları yapabilirsiniz:

$words = explode(" ", $body);

$ Vücutta al kelimelerin bir dizisini oluşturma.

$index  = array_search($query, $words);  
$string = $words[$index - 1]." ".$words[$index]." ".$words[$index + 1];

Sorgu fazla 1 kelime üzerinden oluşur Ama eğer belaya olacaktır.

explode - array_search

Ben PHP bilmiyorum, ama sen normal ifadeler kullanabilirsiniz eğer aşağıdaki birini kullanabilirsiniz:

string query = "search";
int numberOfWords = 2;
Regex(
       "([^ \t]+\s+){"
     + numberOfWords
     + "}\w*"
     + query
     + "\w*(\s+[^ \t]+){"
     + numberOfWords
     + "}"
);

Size izin hangi, strpos arama teriminin başlangıcını bulmak ve strlen uzunluğunu almak için kullanabilirsiniz gibi geliyor bana ...

  • Create one array from the beginning of the text to the search term and then display the last word in that array and,
  • Create a second array from the words after strpos + strlen and display the first word in that array.

Zaten arama terimi önce ve sonra bazı karakterler sayısına ellerinizi var eğer bir diziye bu patlayabilir Ya da, bir veya iki kelime dışarı çekebilirsiniz.

nasıl iki tarafında bir kaç kelime hakkında:

<?php

$subject= "Four score and seven years ago, our forefathers brought forth upon this continent a new nation";
$pattern= "/(\w+\s){3}forth(\s\w+){3}/";

preg_match($pattern, $subject, $matches);

echo("... $matches[0] ...");

verir:

... our forefathers brought forth upon this continent ...