Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Funkcja split i wyrażenia regularne
-grzegorz_m-
post
Post #1





Goście







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] (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
(niestety stosując funkcję split trację wiedzę na temat tego co rozbija sring na części)
Go to the top of the page
+Quote Post
cbagov
post
Post #2





Grupa: Zarejestrowani
Postów: 181
Pomógł: 18
Dołączył: 19.04.2008

Ostrzeżenie: (10%)
X----


?

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
Go to the top of the page
+Quote Post
-grzegorz_m-
post
Post #3





Goście







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 (IMG:http://forum.php.pl/style_emoticons/default/graduated.gif)
Go to the top of the page
+Quote Post
-grzegorz_m-
post
Post #4





Goście







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 (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
  1. <?php
  2. $res = preg_match_all("/[(.{3,12})]([^[]]+)(?![)/", $str, $_matches);
  3. ?>
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 20:07