Potrzebne odpowiednie wyra?żenie regularne.

Potrzebne odpowiednie wyra?żenie regularne.
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam.

Mam wielką prośbę

Czy ktoś znający się na wyrażeniach regularnych mógłby napisać mi takie
(najlepiej z wykorzystaniem preg_* ) które np. z następującej liniki tekstu:

Kopiuj
<?php 
   $text = "SELECT id, foo FROM tabela WHERE id=4"; 
?>

Tworzyło by tablicę :

Kopiuj
<php 
   $wynik['SELECT'] = 'id, foo'; 
   $wynik['FROM'] = 'tabela'; 
   $wynik['WHERE'] = 'id=4'; 
?>

Czyli aby wyrażenie (bądź funkcja) wg. podanych słów kluczowych dzieliło wszystko na odpowiednie części i przekształcało w tablicę.

Byłbym bardzo wdzięczny.

M6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 374
0

Samo wyrażenie może wygladać tak:
"SELECT (.) FROM (.) WHERE (.*)";
ale co do wrzucenia tego do tablicy to pokombinuj troche :)
albo może zrób to na zwykłych funkcjach, np. strpos() itd

Vengeance
  • Rejestracja: dni
  • Ostatnio: dni
0

A co proponujesz na bardziej uniwersalną rzecz. Bo np.

Kopiuj
<?php 
    $text = "SELECT id, foo FROM tabela WHERE id=4"; 
    $text = "SELECT id, foo FROM tabela LIMIT 5";
?>

Tu już chyba to podane przez Ciebie wyrażenie nie zadziała (mogę się mylić).

Nie znam się na wyrażeniach kompletnie ale gdzieś kiedyś coś widziałem i pytam czy może to zadziała :) A mianowicie.

'(SELECT|DELETE|CREATE) (.+?) FROM (.+?) (WHERE|LIMIT) (.+?)'

????

Dzięki za pomoc.

Marooned
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
0

'(SELECT|DELETE|CREATE) (.+?) FROM (.+?) (WHERE|LIMIT) (.+?)'

To nie możesz sprawdzić, czy zadziała zamiast pytać? :|

No ale ja mam pytanie... co oznacza (.+?) i czym się różni od (.+) ??? To do osób obcykanych w RegExp (Vogel, piechnat, ...).

M6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 374
0

No ale ja mam pytanie... co oznacza (.+?) i czym się różni od (.+) ??? To do osób obcykanych w RegExp (Vogel, piechnat, ...).

(.*) - oznacza dowolny znak(bez znaków nowej lini) zero lub wiecej razy
(.+) - oznacza dowolny znak(bez znaków nowej lini) jeden lub wiecej razy
A o samym znaku zapytania nie słyszałem :)

Może by zrobić:
(.) (.) (.) (.) (.) (.) (.*) ...
i potem sprawdzamy, jesli //$1 == SELECT to tak dalej

btw: zawsze sie znajdzie jakiś wyjątek :p
Np. może być samo SELECT * FROM tabela :]

WA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 501
0

A o samym znaku zapytania nie słyszałem :)

A nie oznacza to przypadkiem jednego znaku po prostu?

Vogel
  • Rejestracja: dni
  • Ostatnio: dni
0

Hmmm. A coś takiego:

(([A-Z]+)\ *([a-z,*]+))+

nie może być ??

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.