Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [regexp] Odszukiwanie zmiennych w stringu
SHiP
post
Post #1





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


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?

Ten post edytował SHiP 26.08.2007, 21:33:35


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
emacieka
post
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 1
Dołączył: 29.12.2003
Skąd: Szczecin

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


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

Ten post edytował emacieka 27.08.2007, 17:40:20


--------------------
''' ... Among the blind one eyed man is a king ... '''
Go to the top of the page
+Quote Post
SHiP
post
Post #3





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


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


Ten post edytował SHiP 27.08.2007, 19:08:12


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
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 Aktualny czas: 21.08.2025 - 19:31