Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyrażenia regularne
styryl
post
Post #1





Grupa: Zarejestrowani
Postów: 223
Pomógł: 27
Dołączył: 16.04.2008
Skąd: Bakutilu

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


Muszę zrobić walidacje, warunków w sql i mam mały problem, mianowicie dostaję stringa np. "2 AND 2 AND 1 OR 2" gdzie pod liczby podstawiane są warunki. Aby było łatwiej usuwam przed sprawdzeniem wszystkie spacje co daje mi to:

  1. 2AND2AND1OR2


Sprawdzam takim wyrażeniem które działa:

  1. $check = '/^[0-9]{1}(((AND|OR)[0-9]{1})+)?$/i';


Mogą być używane tylko AND i OR. Ale mam problem jak sprawdzić czy poprawny jest np taki string (nawiasy, ułożenie liczb do podstawienia warunków itd):

  1. (1OR2)OR(1AND2OR(1AND2))


Ogólnie wyrażenia nie są mocną stroną w moim warsztacie umiejętności, stąd kierują do was prośbę o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Ja na Twoim miejscu nie bawiłbym się w wyrażenia regularne (a przynajmniej nie robiłbym tego tylko i wyłącznie na regexpach). Za to zbudowałbym prościutki parser, który zagłebiając się w kolejne nawiasy zamieniałby Twoje wyrażenie w ten sposób:

Kod
1. (1 OR 2) OR (1 AND 2 OR (1 AND 2))
2. W_1      OR (1 AND 2 OR W_2)
3. W_1      OR W_3
4. W_4


Zawartość kolejnych nawiasów mógłbyś walidować w sposób, jaki stosujesz dla prostych warunków.

Zresztą, jeśli chodzi tylko o poprawność składniową (ew. filtrowanie znaków), możesz pokusić się o usunięcie nawiasów, sprawdzenie poprawności wyrażenia i porównanie liczby nawiasów otwierających i zamykających. Bo jeśli to jest poprawne:
Kod
(1 OR 2) OR (1 AND 2 OR (1 AND 2))

to poniższe również musi być poprawne składniowo (chociaż może mieć inny sens logiczny):
Kod
1 OR 2 OR 1 AND 2 OR 1 AND 2


Ten post edytował sowiq 9.09.2013, 09:43:33
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 04:56