Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Jak wyciągnąć dane ze stringa? - Wyrażenia Regularne
Forum PHP.pl > Forum > Przedszkole
Nevanda
Witam. Mam następujący problem. Szukałem już jego rozwiązania na forum, ale jakoś mi się nie udało nic znależć.


Mam coś takiego

  1. <?php
  2. $ex = 'teksttekstteksttekst tekst: "{a:1:1}, teksttekstteksttekst tekst tekst {b:1:1} teksttekst";
  3. preg_match_all( 'questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?', $ex, $wynik );
  4. var_dump( $wynik );
  5. ?>


Czego potrzebuję? Informacji jakie wyrażenie regularne wstawić z miejsce questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?

Co chcę uzyskać? Chcę wrzucić do array'a $wynik dane zawarte w {}

Innymi slowy chce zeby sie wyswietliło:

array(2) { [0]=> string(7) "{a:1:1}" [1]=> string(7) "{b:1:1}" }

Wie ktoś jak to zrobić ?
rasgan
Dokładnego mechanizmu nie podam, bo znam bardzo słabo manipulowanie łańcuchami, ale podzielić sobie swój łańcuch za pomocą funkcji explode na mniejsze zaczynające się od {. Potem te mniejsze łańcuchy możesz obciąć w miejscu wystąpienia } i zwrócić do tablicy.

Kod
$nowy_string = explode( '{' , $stary_string );
for( $i = 0; $i < count( $nowy_string ); $i++ )
{
    $nowy_string[$i] = substr( $nowy_string[$i] , 0 , 7 );
}


Jakoś tak bym to zrobił, ale głowy nie dam że zadziała. Pisałem na szybko w pracy.

EDIT:

Poprawiłem w domu na:
Kod
<?php


$ex = 'teksttekstteksttekst tekst: "{a:1:1},  teksttekstteksttekst tekst tekst {b:1:1} teksttekst"';  
$nowy_string = explode( '{' , $ex );
for( $i = 1; $i < count( $nowy_string ); $i++ )
{
    $nowy_string[$i] = '{'.substr( $nowy_string[$i] , 0 , 6 );
}
$nowy_string[0] = null;

var_dump( $nowy_string );

?>

Działa jak należy smile.gif
Nevanda
Nono. Tylko problem jest tego typu ze dane w { } mają różną długość (niekoniecznie 5 znaków)
rafaelb
Myślę że to mogło by pomóc
  1. <?php
  2. {([^{]*)}
  3. ?>


co oznacza dowolny ciąg znaków pomiędzy { } ale bez { czyli rozróżni Ci kilka {} {} {}
Nevanda
Cytat(rafaelb @ 8.06.2007, 11:24:03 ) *
Myślę że to mogło by pomóc
  1. <?php
  2. {([^{]*)}
  3. ?>


co oznacza dowolny ciąg znaków pomiędzy { } ale bez { czyli rozróżni Ci kilka {} {} {}


Hmmm.. nadal nie działa ( problem jest jeszcze w tym, ze znaki {} są znakami specjalnymi )
rafaelb
Po pierwsze masz błąd w kodzie tzn nie zamknięty string
A po drugie wyrażenia regularne wstawia się w / /

  1. <?php
  2. $ex = 'teksttekstteksttekst tekst: "{a:1:1}, teksttekstteksttekst tekst tekst {b:1:1} teksttekst"';
  3. $pattern = '/{([^{]*)}/';
  4. preg_match_all( $pattern, $ex, $wynik);
  5. var_dump( $wynik );
  6. ?>
Nevanda
Rozumiem. Ale i tak wynik zapytania mnie nie zadowala.
wypluwa coś takiego:

"array(2) { [0]=> array(2) { [0]=> string(7) "{a:1:1}" [1]=> string(7) "{b:1:1}" } [1]=> array(2) { [0]=> string(5) "a:1:1" [1]=> string(5) "b:1:1" } }"

Już sobie poradziłem, skorzystałem ze skryptu rasgan'a trochę tylko przerobiłem:

  1. <?php
  2. $ex = 'teksttekstteksttekst tekst: {a:1:1:8974389432}, tekstkst tekst tekst {b:1:1} teksttekst';
  3.  
  4. $nowy_string = explode( '{' , $ex );
  5. for( $i = 1; $i < count( $nowy_string ); $i++ )
  6. {
  7. $next_s = explode( '}' , $nowy_string[$i] );
  8. $nowy_string[$i] = $next_s[0];
  9. }
  10. $nowy_string[0] = null;
  11. var_dump( $nowy_string );
  12. ?>


Działa, więc dziękuję wszystkim za pomoc smile.gif
rafaelb
Cytat(Nevanda @ 8.06.2007, 15:03:36 ) *
Rozumiem. Ale i tak wynik zapytania mnie nie zadowala.
wypluwa coś takiego:

"array(2) { [0]=> array(2) { [0]=> string(7) "{a:1:1}" [1]=> string(7) "{b:1:1}" } [1]=> array(2) { [0]=> string(5) "a:1:1" [1]=> string(5) "b:1:1" } }"

Działa, więc dziękuję wszystkim za pomoc smile.gif

  1. <?php
  2. $wynik = $wynik[0]
  3. ?>

i masz tylko to co chciałeś
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.