Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyszukanie z "omijaniem"
Forum PHP.pl > Forum > PHP
Blackhole
Załóżmy, że mam tekst:
Kod
to jest [b][i]fragment tekstu[/i][/b], który jest [u]pogrubiony i pochylony[/u]
Chciałbym teraz wyszukać (znaleźć początek i koniec) fragment
Cytat
tekstu, który jest pogrubiony i
Jak to można zrobić?
Nie mam żadnego pomysłu prócz pisania jakiejś własnej dedykowanej funkcji do tego. Czy jest może jakiś łatwiejszy, znany Wam sposób?
tehaha
a tak jaśniej? może chodzi Ci o http://php.net/manual/en/function.strpos.php
Blackhole
strpos to za mało.
Chciałbym wyszukać z podanego fragmentu wybraną część, ale przeszkadzają w tym znaczniki BBCODE zawarte w tym fragmencie. Nie mogę ich usunąć i wtedy wyszukać, bo to popsułoby mi ostateczny efekt. Potrzebuję coś, co będzie potrafiło "uczynić niewidocznymi" te znaczniki na czas wyszukiwania fragmentu.
jaslanin
Najlepiej by było jakbyś napisał co chcesz osiągnąć, zapewne to żeby w wyszukiwaniu były wyróżnione poszukiwane elementy. Tylko że takie coś realizuje się inaczej, tzn. rozbija frazę na wyrazy kluczowe na wyrazy a potem zaznacza (robi tak np. google, phpbb3).

Kod
<?php

function stripBBCode($text_to_search) {
$pattern = '|[[\/\!]*?[^\[\]]*?]|si';
$replace = '';
return preg_replace($pattern, $replace, $text_to_search);
}

echo stripBBCode("to jest [b][i]fragment tekstu[/i][/b], który jest [u]pogrubiony i pochylony[/u]");
// wynik: to jest fragment tekstu, który jest pogrubiony i pochylony

?>
tehaha
to napisz dokładnie co chcesz osiągnąć, bo inaczej to ciężko wymyślić rozwiązanie...może użyj wyrażenia regularnego http://www.php.net/manual/en/function.preg-grep.php
Blackhole
Ok, jeśli dotychczasowe wyjaśnienie nie wystarcza, to podaję jeszcze więcej szczegółów smile.gif

Mając tekst
Kod
to jest {b}{i}fragment tekstu{/i}{/b}, który jest {u}pogrubiony i pochylony{/u}
chcę wywołać jakąś funkcję (niech nazywa się "something"):
  1. <?
  2. $txt = 'to jest {b}{i}fragment tekstu{/i}{/b}, który jest {u}pogrubiony i pochylony{/u}';
  3. $search = 'tekstu, który jest pogrubiony i';
  4. $found = something($search, $txt);
  5. ?>
Zmienna $found ma zawierać np. tablicę w indeksem początku i końca ciągu $search w $txt lub FALSE, gdy ciągu nie ma.
Tak więc na przykładzie tego kodu $found powinno zawierać:
Kod
Array (
   [0] => 23
   [1] => 65
)

Czy już wiecie, o co mi chodzi?
tehaha
heh dobra łamigłówka, udało mi się stworzyć taką funkcję:
  1. <?php
  2. //get start/end point of needle
  3.  
  4. //search subject
  5. $txt = 'ala{u}{i}aaa ma kota a kot{u}{i}{/u}{/i}ma ale{u}{i}';
  6. //searched needle
  7. $needle = 'kot ma ale';
  8. //make pattern
  9. $pattern = "/".str_replace(' ', '([ {}uib\/]+)', $needle)."/";
  10. preg_match($pattern, $txt, $matches, PREG_OFFSET_CAPTURE);
  11. $string = $matches[0][0];
  12. //get length of matched string
  13. $length = strlen($string);
  14.  
  15. $result['start']= $matches[0][1];
  16. $result['end'] = $matches[0][1]+$length;
  17. print_r($result);
  18. ?>

aczkolwiek testowałem, ją tylko na takim bardzo prostym przykładzie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.