Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Funkcja split i wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
grzegorz_m
Witam potrzebuję pomocy przy rozwiązaniu następującego problemu:

-mam tekst: [img]ala ma kota [123456789...] kot ma ale [tx1] tekst dowolny ... [img] bla bla
-z powyższego tekstu chciałbym uzyskać: [something] = something -czyli wszystko co jest w nawiasach [coś]jest kluczem do tego co za nim jest wpisane (klucze z zakresu {3,12} ).

Uzyskałem coś takiego:
  1. <?php
  2. $str = '[img]ala ma kota [123456789...] kot ma ale [tx1] tekst dowolny ... [img] bla bla';
  3. $res = split("[.{3,12}]",$str);
  4. unset($res[0]);//pierwszy element jest pusty zawsze
  5. print_r($res);
  6. ?>


Array ( [1] => ala ma kota [2] => kot ma ale [3] => tekst dowolny ... [4] => bla bla )

...a chciałbym coś w tym stylu:

[img] => ala ma kota
[123456789...] => kot ma ale
[tx1] => tekst dowolny ...
[img] => bla bla


Jak sprawdzić, że ala ma kota zostało poprzedzone [img] questionmark.gif?
(niestety stosując funkcję split trację wiedzę na temat tego co rozbija sring na części)
cbagov
?

Kod
<?PHP
$str = '[img]ala ma kota [123456789...] kot ma ale [tx1] tekst dowolny ... [img] bla bla';
$res = preg_match_all("/\[(.{3,12})\]([^\[\]]+)(?!\[)/", $str, $_matches);
   //unset($res[0]);//pierwszy element jest pusty zawsze
   //print_r($res);

echo "<pre>";
var_dump ($_matches);
echo "</pre>";

exit;

?>


Dalej juz chyba dasz rade
grzegorz_m
Wcześniej udało mi się spłodzić coś takiego:

  1. <?php
  2. $str = "[img]ala ma kota [txt1]kot ma ale [tx2]tekst dowolny ...[img] bla bla";
  3.  
  4. $res = split("[.{3,12}]",$str);
  5.  
  6.  unset($res[0]);//pierwszy element jest pusty zawsze
  7.  echo $str."<br />";
  8.  
  9.  $from = 0;
  10.  $len = 0;
  11.  $type = ''; 
  12.  
  13. foreach ($res as $key=>$value) {
  14.  $len = strpos($str, $value) - $from; //len
  15.  $type = substr($str,$from,$len); //type
  16.  echo "<br />Value: ".$value;
  17.  echo "<br />Type: ".$type; 
  18.  $from += strlen($type) + strlen($value);  //from
  19. }
  20. ?>


Efekt
[img]ala ma kota [txt1]kot ma ale [tx2]tekst dowolny ...[img] bla bla

Value: ala ma kota
Type: [img]
Value: kot ma ale
Type: [txt1]
Value: tekst dowolny ...
Type: [tx2]
Value: bla bla
Type: [img]

Widzę jednak, że bardziej od myślenia przydałaby mi się tutaj znajomość funkcji...
Bardzo dziękuję za pomoc i poświęcony mi czas graduated.gif
grzegorz_m
Możecie mi powiedzieć co jest nie tak z tym wyrażeniem, że w zdaniach ucina mi ostatnią literę (nie dotyczy ost. zdania), więc chyba przez "["

  1. <?php
  2. [ALA]to jest ala[OLA]to jest ola[EWA]to jest ewa
  3. array(3) {
  4. [0]=>
  5. array(3) {
  6. [0]=>
  7. string(15) "[ALA]to jest al"
  8. [1]=>
  9. string(15) "[OLA]to jest ol"
  10. [2]=>
  11. string(22) "[EWA]to jest ewa
  12. "
  13. }
  14. [1]=>
  15. array(3) {
  16. [0]=>
  17. string(3) "ALA"
  18. [1]=>
  19. string(3) "OLA"
  20. [2]=>
  21. string(3) "EWA"
  22. }
  23. [2]=>
  24. array(3) {
  25. [0]=>
  26. string(10) "to jest al"
  27. [1]=>
  28. string(10) "to jest ol"
  29. [2]=>
  30. string(17) "to jest ewa
  31. "
  32. }
  33. }
  34. ?>


to jest al a powinno być to jest ala

Nie bardzo rozumiem to "/\[(.{3,12})\]([^\[\]]+)(?!\[)/" wyrażenie, więc nie umiem doszukać się błędu sadsmiley02.gif
  1. <?php
  2. $res = preg_match_all("/[(.{3,12})]([^[]]+)(?![)/", $str, $_matches);
  3. ?>
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.