![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 6 Dołączył: 30.06.2008 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Witajcie!
Ostatnio tworząc swój projekt stanąłem nad pewną kwestią, potrzebuję rozbić string z takiej postaci: [pole1=0,pole2="Test"] Proste? Nie sądzę, rozpatrzę dla was kilka problemów: [pole1=0,pole2=1] - wszystkie "wartości" dla pól są intami, prosta sprawa: $exp = explode(',', $tekst); no i otrzymam ładny array( 0 => 'pole1=0', 1 => 'pole2=1' ) no i później używam preg_match by ładnie to "obrobić". [pole1="test",pole2="test2"] - wszystkie "wartości" to stringi, czyli to samo co wyżej. To rozpatrzmy to teraz to problemowe rozbicie: [pole1=0,pole2="Test, test"] - w czym problem? Otóż czy to preg_split czy explode (używam tego pierwszego w postaci: $split = preg_split("/[\s]*[,][\s]*/", $match) - dzięki czemu mam "niezależny" explode, niezależny o tyle, że przed nim, czy też po nim mogę ile chcę użyć spacji, dzięki czemu zapisz jest łatwiejszy) to zawsze będę miał błąd, dlaczego? Ponieważ w wartości "pole2" mamy przecinek, czyli część dzięki której rozbijamy ten string. ( Wynikiem rozbicia tego będzie tablica: array( 0 => 'pole1=0', 1 => 'pole2="Test", 2 => " test" ) ). Moje pytanie do was, czy da się ten problem jakoś rozwiązać tak by string w " ", był nieczuły na explode (preg_split)? Ten post edytował Kemsan 31.01.2011, 17:07:47 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 97 Pomógł: 11 Dołączył: 2.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
może trochę na około, ale weź preg replacem najpierw zamień wszystkie przecinki na jakiś własny symbol np -|- czy coś takiego, ale pod warunkiem, że znajdują się między =" a ".
Potem zrób splita, a na koniec w całej tablicy zrób replace -|- na przecinek |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 6 Dołączył: 30.06.2008 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
W tym rzecz, że aplikacja ma być dla wielu użytkowników, a przestrzeganie ich "używajcie" \ przed przecinkami troszkę mija się z celem, dziękuje za szybką odpowiedź.
EDIT: Nad moją wiadomością, była inna, nie ta co teraz, tamta została usunięta z niewiadomych mi przyczyn. Ten post edytował Kemsan 31.01.2011, 17:32:35 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że łatwiej będzie wszystkie POLE=WARTOŚĆ pobierać przez preg_match_all. Przyjąłem, że:
1. identyfikator POLE może składać się tylko z liter a-zA-Z i cyfr 0-9 2. przed i za znakiem równości mogą występować białe znaki 3. WARTOŚĆ może być albo intem, albo stringiem w cudzysłowie 4. Nie ma żadnych znaków ucieczki w tym formacie (czyli nie można zapisać np.: [pole1="aaa \" bbb"] albo [pole2="ccc "" ddd"]) Kod ~([a-zA-Z0-9]+)\s*=\s*([0-9]+|".*?")~ Znak | to LUB, pytajnik w wyrażeniu .*? oznacza "wyłączenie zachłanności". Reszta powinna być na tyle jasna, że jeśli będziesz kiedyś potrzebował dodać do tego liczby z częścią ułamkową, albo tekst w apostrofach, to dasz sobie radę. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 6 Dołączył: 30.06.2008 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Dziękuje, działa świetnie.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:21 |