Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
Mikiisz
Szukałem ale nie znalazłem odpowiedzi (przyznam się, marnie szukałem).
Jak skonstruować wyrażenie które sprawdzi czy w danym ciagu występują po 2 litery każdej litery z zakresu [a-c].
czyli przy ciągu 'aabbcc' orztymam prawde, ale równoczesnie przy 'aaabcc' już fałsz.
mariolita
Hej, zastanawiam się nad twoim problem i stworzylem coś poniżej wklejam, jest dość późno i na pewno jutro by się dało uprościć ten kod ale sprawdź czy chodzi ci o coś takiego?

podstaw sobie pod $ciag_znakow swój ciąg - ewentualnie sie skrypt dopracuje.

  1. <?php
  2.  
  3. $ciag_znakow = "fsddfdsccca";
  4.  
  5. $ciag_znakow_przelicz_znaki = strlen($ciag_znakow);
  6.  
  7. $i = 0;
  8.  
  9. $start = "";
  10.  
  11. while ($i < ($ciag_znakow_przelicz_znaki - 1)) {
  12.  
  13. $nanstepny = $ciag_znakow[$i + 1];
  14.  
  15. if($ciag_znakow[$i] == $nanstepny) {
  16.  
  17. $start = $start.$ciag_znakow[$i];
  18.  
  19. } else {
  20.  
  21. $start = $start.$ciag_znakow[$i].".";
  22.  
  23. }
  24.  
  25. $i++;
  26.  
  27. }
  28.  
  29. $usun_ostatnia_kropke = substr($start,0,-1);
  30.  
  31. $kawalki = explode(".", $usun_ostatnia_kropke);
  32.  
  33. $policz_kawalki = count($kawalki);
  34.  
  35. $whileStart = 0;
  36.  
  37. while ($whileStart < $policz_kawalki) {
  38.  
  39. $sprawdz_ile_znakow = strlen($kawalki[$whileStart]);
  40.  
  41. if($sprawdz_ile_znakow == 2) {
  42.  
  43. echo "Litera: ".substr($kawalki[$whileStart],0,-1)." się powtarza<br>";
  44.  
  45. }
  46.  
  47. $whileStart++;
  48.  
  49. }


Output: "Litera: d się powtarza"
LowiczakPL
po 2 litery każdej litery z zakresu [a-c].

najprościej

/a{2}b{2}c{2}/
trueblue
Cytat(LowiczakPL @ 10.05.2016, 23:00:37 ) *
po 2 litery każdej litery z zakresu [a-c].

najprościej

/a{2}b{2}c{2}/

To się sprowadza do porównania stringu z 'aabbcc';

(([a-c])\2){3}
Ale nie wiem czy może być sytuacja aaaabb lub aabbbb, itd.
Pyton_000
@trueblue Twój regexp ładnie złapie 'aaaaaa' smile.gif
trueblue
Pyton_000, zdaję sobie sprawę, podchodzi to pod przypadki, które wymieniłem.
Nie wiem jednak czy autor wyklucza tylko nieparzyste wystąpienia, czy również całe grupy mają między sobą się różnić.

Może nawet oczekuje, że ma być tylko i wyłącznie 'aabbcc' smile.gif
Mikiisz
Chodzi tutaj tylko o sprawdzenie czy występują dokładnie po 2. Nie ważne w jakiej kolejności
mariolita
te moje wypociny sie nie nadaja?
Mikiisz
Nadają i dziękuję pięknie.
trueblue
(?:aa()|bb()|cc()){3}\1\2\3

(?:(aa|bb|cc)(?!.*\1)){3}
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.