Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]preg_match_all
Crenos
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 17.01.2009

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


Nie wiem kompletnie jak napisać wzorzec do tej funkcji. Przeczytałem kilka razy Wiki: http://en.wikipedia.org/wiki/Regular_expression bawiłem się tym narzędziem http://rubular.com/
Ale nic sensownego mi nie wychodzi.

mam taki string

Cytat
pierwszy string { drugi string|trzeci string {czwarty string|piąty string}}|szósty string {{ósmy string|dziewiąty string} dziesiąty string}{jedenasty string|dwunasty string} trzynasty string


chciałbym aby wyglądał tak

  1. (
  2. [0] => Array
  3. (
  4. [0] => pierwszy string
  5. [1] => { drugi string|trzeci string {czwarty string|piąty string}}
  6. )
  7.  
  8. [1] => Array
  9. (
  10. [0] => szósty string
  11. [1] => {{ósmy string|dziewiąty string} dziesiąty string}
  12. [2] => {jedenasty string|dwunasty string}
  13. [3] => trzynasty string
  14. )
  15.  
  16. )


To oczywiście nie jest wszystko co bym chciał zrobić z tym stringme ale jeżeli ogarnę to myślę, że dalej sobie porodzę. Tylko poprosiłbym o prosty opis dokładnie który fragment za co odpowiada.
A odnośnie wzorca to chciałbym aby tak jak w przypadku array[0] separował string, który nie zawiera się w znakach {}, separował stringi w znakach {} ale żeby ilość { była równa ilości } oraz jeżeli pojawia się | żeby tworzył kolejna tablice po tym znaku.
Mam nadzieję, że w miarę przejrzyściej opisałem.
Pytanie jest też takie czy w ogóle da się to zrobić za jednym razem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
artuross
post
Post #2





Grupa: Zarejestrowani
Postów: 164
Pomógł: 9
Dołączył: 30.12.2011

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


Uzyj roznych funkcji, ktore zaleznie od wystepujacego znaku, beda sie do siebie odnosic.
Chodzi o to, by nie zaglebiac sie w nie-wiadomo-ile-if'ow. Jedna funkcje realizuje konkretna operacje, przy czym caly czas korzysta z jednego 'pointera' do konkretnej wartosci.
I tak, masz string 'string-1 { string-2 { string-3|string-4}}'
Wykonujesz petle i za kazdym razem, gdy znak jest rozny od {}| to wywolujesz funkcje string, ktorej przekazujesz znak, i tablice z wartosciami.
Gdy znak jest rowny { to musisz w obecnej tablicy utworzyc kolejna, wiec po prostu przekazujesz tablice i zamieniasz ja na tablice.
Gdy znak jest rowny | to pobierasz key aktualnego elementu i tworzysz nowy element (ten key musisz gdzies zapisac, zeby sie pozniej do niego odnosic, albo mozesz stworzyc referencje do niego i zapisac w jakiejs-tam-zmiennej-ktora-zawsze-jest-uzywana.
Jesli znak jest } to 'zamykasz', aktualna petle i przechodzisz do nastepnego elementu w tablicy wyzej warstwowo (i tutaj juz pisalem, caly myk polega na tym, by dobrze wykonac ten element, reszta nie ma znaczenia).


Opcja alternatywna, ktora teraz przyszla mi do glowy to zliczenie wszystkich utworzenie podciagow, tzn. najpierw wyciagasz najbardziej zewnetrzne ciagi (np. mozesz zliczyc wszystkie {, nastepnie }, i gdy ich roznica bedzie rowna 0 to zapisujesz calosc pomiedzy tymi dwoma do kolejnego elementu tablicy). Pozniej robisz to samo z ciagami, ktore powstaly, itd., itd., az ilosc wykonanych operacji bedzie rowna 0, wtedy przerywasz wykonywanie.
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 04:47