Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [regexp] Odszukiwanie zmiennych w stringu
Forum PHP.pl > Forum > PHP
SHiP
Nie wiem co jest źle ale moje wyrażenie po prostu nie działa. Musze odnaleźć wszystkie zmienne w danym ciągu znaków np.
Kod
$variable
$variable['array']
$variable -> objectData
or something more complicated
$variable['array'] -> objectNode['arrayindex'] -> somethingelse -> somethingelse2

Próbowałem czegoś takiego:

  1. <?php
  2. $param = 'somethig else $myVariable["asľasd"] -> something sdfsdf'
  3. preg_match_all('#$([a-zA-Z0-9_]+)(?Ž[(.*?)])?((?R)|-> [a-zA-Z0-9_]+)?#x', $param, $vars);
  4. print_r($vars);
  5. ?>

ale to znajduje jedynie $myVariable

Jakieś pomysły?
emacieka
Nie ma to jak mieć za dużo wolnego czasu tongue.gif
  1. <?php
  2. $param = '$myVariable['assd'] -> something
  3. $variable
  4. $variable["array"]
  5. $variable -> objectData
  6. $variable['array'] -> objectNode["arrayindex"] -> somethingelse -> somethingelse2 -> objectNode["arrayindex"]
  7. $variable["array"] -> objectNode -> somethingelse -> somethingelse2
  8. $obj->objectNode -> somethingelse ->somethingelse2';
  9.  
  10. $varNameRegex = '([a-zA-Z0-9_]+)';
  11. $arrayRegex = '(([['\"]*(.+?)['\"]*])+)?';
  12. $objRegex = '([s]*->[s]*)?';
  13. $regex = '#$((' . $objRegex . $varNameRegex . $arrayRegex . ')+)#';
  14.  
  15. preg_match_all( $regex, $param, $vars );
  16. print_r( $vars );
  17. ?>

Niestety uwzględnienie wszystkich możliwości zapisywania zmiennych jest ciężkie... Przy czymś takim " $array[ bla#$#$% #$% bla bla]" już źle działa - też to wyłapie.
Nie założę się, ale coś mi się wydaje, że jeśli byś przejrzał źródła kodu php to byś coś znalazł w "ładniejszej formie".
A swoją drogą to mały parser z tego powstał Rkingsmiley.png
SHiP
Dzięki za odpowiedz. W wolnym czasie udalo mi sie stworzyć coś takiego
  1. <?php
  2. preg_match_all('#$([a-zA-Z0-9_]+|{(?:\"|').*?(?:\"|')})
  3. (
  4. (s*[(?:\"|').*?(?:\"|')])
  5. |
  6. s* (-> s*(?:[a-zA-Z0-9_]+|{(?:\"|').*?(?:\"|')}))
  7. )*#xi', $param, $vars);
  8. ?>


Musze to jeszcze lekko rozbudowac(zagnieżdżanie zmiennych w blokach { } oraz w indeksach tablicowych) i będzie jak znalazł do mojej biblioteki winksmiley.jpg.

EDIT:
Hmm dziwne ale IPB konwertuje \s na s ;]

EDIT2:

Mam gada smile.gif
Kod
#\$(?:[a-zA-Z0-9_]+|   {(?:(?:'.*?'|".*?"|(?R))\.)*  (?:'.*?'|".*?"|(?:(?R)))})
    (?:
    (?:\s*\[ (?:(?:'.*?'|".*?"|(?R))\.)*  (?:(?:"|').*?(?:"|')|(?:(?R)))  \])
|
    \s* (?:-> \s*(?:[a-zA-Z0-9_]+  |   {(?:(?:'.*?'|".*?"|(?R))\.)*  (?:'.*?'|".*?"|(?:(?R)))}))
)*#xi
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.