Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Jak wyciągnąć dane ze stringa? - Wyrażenia Regularne
Nevanda
post 1.06.2007, 14:42:14
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.06.2007

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


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ć ?

Ten post edytował Nevanda 1.06.2007, 14:43:14
Go to the top of the page
+Quote Post
rasgan
post 1.06.2007, 15:00:57
Post #2





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 30.05.2007
Skąd: Kleszczów

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


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

Ten post edytował rasgan 1.06.2007, 15:53:56


--------------------
Szczęścia w mrokach...
Go to the top of the page
+Quote Post
Nevanda
post 8.06.2007, 09:42:34
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.06.2007

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


Nono. Tylko problem jest tego typu ze dane w { } mają różną długość (niekoniecznie 5 znaków)
Go to the top of the page
+Quote Post
rafaelb
post 8.06.2007, 10:24:03
Post #4





Grupa: Zarejestrowani
Postów: 49
Pomógł: 2
Dołączył: 17.01.2004

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


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 {} {} {}
Go to the top of the page
+Quote Post
Nevanda
post 8.06.2007, 13:17:46
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.06.2007

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


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 )
Go to the top of the page
+Quote Post
rafaelb
post 8.06.2007, 13:44:07
Post #6





Grupa: Zarejestrowani
Postów: 49
Pomógł: 2
Dołączył: 17.01.2004

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


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. ?>
Go to the top of the page
+Quote Post
Nevanda
post 8.06.2007, 14:03:36
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.06.2007

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


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
Go to the top of the page
+Quote Post
rafaelb
post 8.06.2007, 15:58:05
Post #8





Grupa: Zarejestrowani
Postów: 49
Pomógł: 2
Dołączył: 17.01.2004

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


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ś
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: 24.07.2025 - 15:01