Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyszukiwanie stringów w pliku - regex
phpamator
post 16.11.2016, 21:58:47
Post #1





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował PHPRexio 16.11.2016, 22:06:53
Go to the top of the page
+Quote Post
Pyton_000
post 17.11.2016, 12:01:25
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:42