Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne w PHP
Forum PHP.pl > Forum > PHP
KotWButach
Witam was, wiem że mogę zrobić to poprzez explode oraz porównać każdą wartość ale nie chcę robić tego w taki sposób. Chciałbym użyć do tego celu wyrażeń regularnych ale mi nie wychodzi.

mam coś takiego

  1.  
  2. $string = "[4, KotWButach, Uczy się]"
  3.  


Chciałbym sprawdzić czy 4 to liczba, czy KotWButach to string oraz czy Uczy się to string

Mam wiec przecinki z którymi nie wiem co zrobić.
Oraz czy da się coś takiego sprawdzić jeżeli miąłbym coś takiego
  1.  
  2. $string = "[4, KotWButach, Uczy się][5, KotNieButach, Nudzi się]"
  3.  



Proszę o pomoc w zrozumieniu zagadnienia.
trueblue
(\[(\d)+,(.+?),(.+?)\])+?
KotWButach
Ta peleryna pod twoim nickiem w pełni zasłużenie smile.gif.

dzięki wielkie smile.gif.
viking
Tyle że ten wzorzec w żaden sposób nie sprawdza typu danych a akceptuje dowolne znaki.
Bardziej coś w stylu \[(\p{N})+,([\p{L} ]+),([\p{L} ]+)\]
KotWButach
W sumie po przetestowaniu żadne mi nie działa i wywala błedy sad.gif
używam preg_match

dla takiego kodu mam że wszystko jest dobrze. A przecież nie ma wartości w drugim nawiasie.

  1.  
  2. $string = "[3, asdasd, Uczy się][, asdasd, Uczy się]";
  3.  
  4. var_dump(preg_match("((\[(\d)+,(.+?),(.+?)\])+?)", $string));
  5.  
Pyton_000
Jest dobrze bo znalazło przynajmniej 1 pasujący wzorzec.
KotWButach
a czy można zrobić tak by w razie gdyby czegokolwiek nie było lub było źle by wywalił false?
trueblue
((\[(\d)+,(.+?),(.+?)\]){2}?)

: ))
KotWButach
Prawie jest.

Staram się jednak zrobić to bardziej elastyczne lecz nie wychodzi

((\[(\d)+,(.+?),(.+?)\]){2}?)
((\[(\d)+,(.+?),(.+?)\]){n}?)

chciałbym by działało dla N "podciągów"
viking
  1. preg_match_all('/\[(\p{N})+, ([\p{L} ]+), ([\p{L} ]+)\]/u', $string, $out, PREG_SET_ORDER);
  2.  
  3. var_dump($out);
KotWButach
Czyli jednak muszę użyć explode by sprawdzić ile jest przebiegów? Bo fnc zwraca tylko te dane, które walidacje przeszły co jest świetne swoją drogą dla dodawania do bazy, ale gorzej dla klasy mającej na celu walidacje danych.
com
yy, ale przecież dane nie poprawne są danymi nie poprawnymi? Wiec jaki widzisz problem w walidacji?
KotWButach
Nie wiem ile jest iteracji. Skoro zwraca mi powiedzmy 5 z 10 (10 nie jest jawne to tylko przykład) to dalej nie wiem czy cały ciąg jest poprawny czy nie, bo nie wiem ile jest iteracji.
Pyton_000
Kod
$strCount = substr_count($string, '][')+1;
var_dump($strCount);

smile.gif
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.