Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyszukiwanie stringów w pliku - regex
Forum PHP.pl > Forum > Przedszkole
phpamator
Hej hej przedszkolaki ... i nie tylko smile.gif

Robię taką małą rzecz do szybkiego podmieniania danych co by mi się ludziki nie mordowali z edytowaniem rekordów ręcznie ale nie potrafię (bo nigdy wcześniej tego nie robiłem) wyszukiwać z użyciem regexów. Oczywiście jeśli wogóle tak można bez nadmiernego rozbudowywania skryptów.
Otóż mój prost(acki)y skrypt robi to tak:
  1.  
  2. // podczas odczytywania sprawdza czy w polu w którym znajduje się np opis produktu występuje wartość ze zmiennej $regex1
  3. // jeśli tak, zamienia na wartość ze zmiennej $regex2 co zresztą widać poniżej. ponieważ jednak są to w większości całe elementy html,
  4. // a co za tym idzie nie pozwolą na zmianę całego ciągu znaków a podmienianie po "kawałku" nie wchodzi w grę bo po diabła robić dwa razy ?:)
  5. // np "<strong> Delivery: </strong> 3-6 days" kiedy wyszukuję "Delivery: 3-6 days". W tej sytuacji mogę najpierw podmienić "Delivery:"
  6. // a następnie "3-6 days" co oczywiście mija się z celem.
  7. // i tu pytanie czy i w jaki sposób mogę to osiągnąć ?
  8. // czy mogę w inpucie wpisać tak przygotowany ciąg, żeby omijał tagi? czy muszę każdy taki fragment w jakiś sposób obrobić?
  9. // czy mogę z poziomu php filtrować tagi i zmieniać tylko te fragmenty które chciałbym zmienić ?
  10.  
  11. while($products = mysqli_fetch_array($prods1)){
  12.  
  13. $products = array($products);
  14.  
  15. foreach($products as $product){
  16.  
  17. //print_r($product);
  18.  
  19. $prod1 .= '<tr><td class="c">'.$a.'</td><td class="l">'.$product[0].'</td><td class="">'.$product[3].'</td>';
  20. if(($product[13] == '') || (!$product[13])){
  21.  
  22. }else{
  23.  
  24. if($regex1==''){
  25. echo '<div class="counter"></div>';
  26. }else{
  27. // aby mieć wgląd w to co się dzieje przechowuję tymczasowo te elementy w których dokonuję zmian w pliku tekstowym
  28. $file = fopen('temp.txt','w');
  29. fwrite($file, $product[13]);
  30. fclose($file);
  31.  
  32. // tu powieliłem żeby jedną zmienną ($str2) pokazać na ekranie ze zmienionym tłem dla wyróżnienia co zostało zmienione
  33. // drugiej natomiast ($str) użyć do późniejszgo zaktualizowania w tabeli.
  34. // tu też przydałoby się jakieś mądrzejsze rozwiązanie ;) no chyba że inaczej się nie da ;)
  35. // - miałem na myśli to wyróżnienie zmienionego tekstu bo oczywiście samo zapisywanie do pliku nie będzie konieczne.
  36.  
  37. $str = file_get_contents('temp.txt');
  38. $str2 = file_get_contents('temp.txt');
  39. //replace something in the file string - this is a VERY simple example
  40. $str = str_replace($regex1, ' '. $regex2 .' ', $str);
  41.  
  42. // zliczamy ilość wystąpienia stringu podczas odczytywania kolejnych wartości z tabeli
  43.  
  44. $str1 = substr_count($str, $regex2);
  45. if($str1){
  46. $ch++;$prod1 .= '<div class="counter"> String changed ' . $ch . ' times </div>';
  47. }
  48. // tu dodaję klasę wyróżniającą zmieniony fragment
  49. $str2 = str_replace($regex1, '<b alt="this string was changed" class="red">'.$regex2.'</b>', $str2);
  50.  
  51. $testfile = 'testfile.txt';
  52. $testfile = fopen('testfile.txt','w');
  53. fwrite($testfile,$str);
  54. fclose($testfile);
  55. }
  56. }
  57.  
  58. $prod1 .= '<td class="bc">'.$product[13].'</td><td class="ac">'.$str2.'</td></tr>';
  59.  
  60. }$a++;
  61.  
  62. }

Obraz poniżej przedstawia jak wygląda wyróżniony tekst po zmianie.

Jakieś sugestie w w/w kwestii panowie i panie ?
Pyton_000
A gdzie problem?

Cytat
np "<strong> Delivery: </strong> 3-6 days" kiedy wyszukuję "Delivery: 3-6 days".


I jak ma to być zamienione?
Musiałbyś z całego tekstu wywalić wszystkie takgi a potem dokonywać zmian...
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.