Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Parsowanie stringu
desavil
post 7.02.2017, 14:12:56
Post #1





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Witam,

W jaki sposób mogę parsować takie coś?:
  1. [("key","val"), ("key2","val2"), ("key3","val3")]

Wpisując "key" chcę uzyskiwać daną wartość przypisaną do niego.
Zaznaczam, że nie jest to JSON, a kolejność może być różna.

Dzięki!

Ten post edytował desavil 7.02.2017, 14:13:49


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
Go to the top of the page
+Quote Post
trueblue
post 7.02.2017, 14:49:06
Post #2





Grupa: Zarejestrowani
Postów: 6 764
Pomógł: 1822
Dołączył: 11.03.2014

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


  1. $string = '[("key","val"), ("key2","val2"), ("key3","val3")]';
  2. $trans = array("(" => "{", ")" => "}", "\",\"" => "\":\"");
  3. $string = strtr($string , $trans);
  4. print_r(json_decode($string ));


--------------------
Go to the top of the page
+Quote Post
desavil
post 7.02.2017, 15:02:17
Post #3





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Wszystko fajnie, tylko jak ktoś w wartości będzie miał, np. nawias to zamieni mu go na nawias klamrowy.
Nie dałoby się zrobić tego jakoś regexem?

Ten post edytował desavil 7.02.2017, 15:02:47


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
Go to the top of the page
+Quote Post
trueblue
post 7.02.2017, 15:12:58
Post #4





Grupa: Zarejestrowani
Postów: 6 764
Pomógł: 1822
Dołączył: 11.03.2014

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


Można.

A tak?
$trans = array("[(" => "[{", ")]" => "}]", "\"), (\"" => "\":\"", "\"), (\"" => "\"}, {\"");


--------------------
Go to the top of the page
+Quote Post
daro0
post 7.02.2017, 16:08:15
Post #5





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

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


A to?

  1. $subject = '[ ( "key" , "val" ), ("key2","[]{}()val2" ), ("key3","val3")]';
  2.  
  3. $patterns = array(
  4. '/\([\s]*"/',
  5. '/"[\s]*\)/',
  6. '/"[\s]*,/',
  7. );
  8. $replace = array(
  9. '{"',
  10. '"}',
  11. '":',
  12. );
  13.  
  14. $json = preg_replace($patterns, $replace, $subject);
  15. var_dump($subject, $json, json_decode($json));


wynik:

  1. string(69) "[ ( "key" , "val" ), ("key2","[]{}()val2" ), ("key3","val3")]"
  2. string(58) "[ {"key": "val"}, {"key2":"[]{}()val2"}, {"key3":"val3"}]"
  3. array(3) {
  4. [0]=>
  5. object(stdClass)#1 (1) {
  6. ["key"]=>
  7. string(3) "val"
  8. }
  9. [1]=>
  10. object(stdClass)#2 (1) {
  11. ["key2"]=>
  12. string(10) "[]{}()val2"
  13. }
  14. [2]=>
  15. object(stdClass)#3 (1) {
  16. ["key3"]=>
  17. string(4) "val3"
  18. }
  19. }
  20.  


Ten post edytował daro0 7.02.2017, 16:09:38
Go to the top of the page
+Quote Post
desavil
post 7.02.2017, 17:54:35
Post #6





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Wygląda znacznie lepiej, ale tutaj znów nie mogę użyć znaku " w wartości. sad.gif


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
Go to the top of the page
+Quote Post
trueblue
post 7.02.2017, 18:51:25
Post #7





Grupa: Zarejestrowani
Postów: 6 764
Pomógł: 1822
Dołączył: 11.03.2014

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


https://regex101.com/r/3mrNRx/1


--------------------
Go to the top of the page
+Quote Post
daro0
post 7.02.2017, 19:25:51
Post #8





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

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


To się daje \" w tym ciągu znaków
  1. $subject = '[("key", "val"), ("key2","\"val2" ), ("key3","val3")]';


Zakładam że format wejściowy który chcesz parsować jest ustalony wg. pewnych reguł.

I jeszcze to:

  1. $subject = array
  2. (
  3. 'key1' => 'value1"'
  4. );
  5.  
  6. $json = json_encode($subject, JSON_PRETTY_PRINT);
  7. var_dump($json);


wynik:

  1. string(26) "{
  2. "key1": "value1\""
  3. }"


Go to the top of the page
+Quote Post
desavil
post 7.02.2017, 21:44:43
Post #9





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Niestety na format wejściowy nie mam żadnego wpływu. sad.gif Jakbym miał to nie byłoby tego całego tematu, bo bym od razu puścił w JSON albo innym XML.
O ile sama struktura jest stała, tak wartości argumentów mogą być dowolne.

Ten post edytował desavil 7.02.2017, 21:50:51


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
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: 27.05.2024 - 16:49