Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] preg_match_all - duplikowanie zamiast układanie po kolei
Forum PHP.pl > Forum > Przedszkole
wree
Witam Serdecznie

Mam taki mały problem. Chcę wyciągnąć dany kod ze strony. Na stronie znajduje się kilka lekko różniących się ciągów znaków, początki i końce są takie same. Chcę dostać je wszystkie ułożone wg. ułożenia na stronie z której pobieram. I mam:

  1. preg_match_all("|<ABC[^>]+>(.*)</[^>]+XYZ>|U", $wynik, $tekst);
  2.  
  3. $kod = $tekst[0][0]. ", " . $tekst[1][0] . "\n";


Ten kod działa, problem leży w samym wyciąganiu kodu i układaniu go koło siebie. To do teraz co zrobiłem wyciąga ten sam kod i mnoży go razy 2 układając go koło siebie. Chcę tak zrobić by po nim wyciągał następny kod tak samo zaczynający się od ABC a kończący na XYZ. Takich kodów na stronie jest kilka (zawsze inna liczba). Przedarłem się przez całe wyrażenia regularne by odszukać odpowiedz... nie znalazłem. Jak ktoś może mnie naprowadzić będę wdzięczny.

pozdrawiam.
blahy
nie wiem czy dobrze Cie rozumiem. Chcesz po prostu wypisac te kody po kolei?
  1. $tekst = "ABCtaXYZsadsad sadsad ABCtbXYZsdaABCtcXYZasddas";
  2. preg_match_all("/ABC[a-z]+XYZ/", $tekst, &$wynik);
  3. foreach($wynik[0] as $rekord) {
  4. echo $rekord."<br>";
  5. }


"wyciąga ten sam kod i mnoży go razy 2 układając go koło siebie" - $tekst[0][0] i $tekst[1][0] to nie to samo
wree
tak właśnie chcę zrobić, ale nie mam tego ciągu jeszcze zapisanego w bazie, zapisuję dopiero jak wybiorę ABCtaXYZ, ABCtbXYZ, ABCtcXYZ. Odczyt z bazy jest dla mnie nie istotny, na razie chcę zapisać do bazy właśnie tak ułożony kod - ABCtaXYZ, ABCtbXYZ, ABCtcXYZ a ciągle mi zapisuje ABCtaXYZ, ABCtaXYZ. Problemu bym nie miał gdyby to były ciągi nie zaczynające się i nie kończące tak samo i gdybym znał liczbę wszystkich występujących. Wtedy zdefiniowałbym każdy z osobna.

W środku wszystkie ciągi mają jedną wspólną część i też mogę je zaznaczyć tak jak miałem wcześniej:

  1. preg_match('/< TAKISAMKOD src="([^>]*)">/', $wynik, $tekst);


ale to nadal zaznacza i wybiera pierwszy kod, który zapisuje do bazy, a opuszcza resztę.

Z preg_match_all zrobiłem tak, że zapisuje nie wszystkie a ten sam kilka razy. Potrzebuję zapisać wszystkie.

foreach to raczej do odczytu.

dzięki za odpowiedz, jakbyś wiedział coś więcej daj znać

---
zapisać już wybrany i ułożony ABCtaXYZ, ABCtbXYZ, ABCtcXYZ do jednego i tego samego miejsca w bazie, nie do kilku miejsc
blahy
ten kod ktory wczesniej podalem znajduje wszystkie 3 pasujace wyrazenia (nie wnikam w poprawnosc Twoich wyrazen regularnych, bo nie wiem czego bedziesz szukal dlatego uproscilem sobie to w kodzie. natomiast jesli wyrazenie jest ok to nie powinno miec wplywu na reszte) i wypisuje je. preg_match_all zapisuje do tablicy $wynik[0] wszystkie dopasowania. pozniej foreachem mozna je albo wypisac, albo zrobic z nich jeden string
  1. $tekst = "ABCtaXYZsadsad sadsad ABCtbXYZsdaABCtcXYZasddas"; //tekst w ktorym ma byc szukane wyrazenie
  2. preg_match_all("/ABC[a-z]+XYZ/", $tekst, &$wynik); //znajdz dopasowania
  3.  
  4. foreach($wynik[0] as $rekord) { //kazde znalezione dodaj do jednego stringa z wynikami
  5. $str.=$rekord.",";
  6. }
  7. $str=substr($str,0,strlen($str)-1); //usun ostatni ,
  8. echo $str; //wynik: ABCtaXYZ,ABCtbXYZ,ABCtcXYZ zamiast echo to do bazy.


"foreach to raczej do odczytu." - musisz jakos po wynikach (tablicy) wywolania preg_match_all przejsc.
"zapisać już wybrany i ułożony ABCtaXYZ, ABCtbXYZ, ABCtcXYZ do jednego i tego samego miejsca w bazie, nie do kilku miejsc" - na wyjsciu tego kodu jest: ABCtaXYZ,ABCtbXYZ,ABCtcXYZ nie o to Ci wlasnie chodzilo?
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.