Wyrażenie regularne i preg_match_all

Wyrażenie regularne i preg_match_all
CA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

Witajcie, proszę o pomoc w wyrażeniem regularnym, mam następujące dane:

Kopiuj
111 {data v1="s1" v2="s2" v3="s3"} 222

I chciałbym wyciągnąć dane do tablicy żeby uzyskać:

Kopiuj
v1=s1;
v2=s2;
v3=s3;

niezależnie od tego jak wiele będzie parametrów.

Mam takie wyrażenie:

{data ((.*?)="(.*?)"){1,}}

Ale niestety nie działa ono u mnie poprawnie - tj. łapie całość { do } ale nie grupuje tego odpowiednio w tablicy.

Proszę o pomoc z ułożeniem odpowiedniego wyrażenia regularnego, które zaradzi tej sprawie.

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
3

Zobacz to, chyba wystarczy szukać po znaku równości.
https://onlinephp.io/c/d3c1d

Kopiuj
<?php

$input = '{data v1="s1" v2="s2" v3="s3" key4="value4"}';
preg_match_all('/(\w+)="([^"]+)"/', $input, $matches);
print_r($matches);

$result = array_combine($matches[1], $matches[2]);

print_r($result);
Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
2

Najprostsze jakie może być to:

Kopiuj
\w+="\w+"

Zakładając że Twoje v1 oraz s1 to [a-zA-Z0-9_]. Ja poszedłbym w tą drogę.

Jeśli s1 może być dowolnym znakiem, to

Kopiuj
\w+=".+?"

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.