Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrazenie regualrne
Forum PHP.pl > Forum > PHP
Adiasz
Witam!

Potrzebuje wyrazenia regularnego, ktore sprawdzi czy zestaw literek np "abcd" zawiera sie w jakims stringu. Kolejnosc nie jest wazna, wazne jest ze kazda litera wystepuje dokladnie raz.

cos ala [abcd]{4} tylko jak dodac zeby kaza literka musiala sie pojawic dokladnie raz?

pozdr
Vogel
hmm... tka na szybko to przychodzi mi tylko do glowy:

Kod
#abcd|abdc|acbd|acdb|itd.|etc.|...#si
Adiasz
generowanie wszystkich permutacji zbioru juz np 10 elem nie bedzie zbyt wydajne, ale dzieki, moze ktos inny ma lepszy pomysl?
phobos
sprawdz sobie to czy ci pasuje
  1. <?php
  2. $tekst="abdc";
  3. $litera=array("a","b","c","d");
  4.  
  5. function check($tekst,$tablica)
  6. {
  7. $max=strlen($tekst);
  8.  foreach($tablica as $value)
  9.  {
  10.  $liczba=0;
  11.  for($i=0;$i<=$max;$i++)
  12.  if($tekst[$i]==$value) $liczba++;
  13.  if($liczba!="1") return false;
  14.  }
  15.  return true;
  16. }
  17.  
  18. if(check($tekst,$litera)) echo "good";
  19. else echo "bad";
  20. ?>
Adiasz
dzieki phobos
Niesety funkcja php mnie nie urzadza gdyz owy regext potrzebny mi jest zeby wstawic go do zapytania do bazy danych.
Aktualnie swoj problem rozwiazuje:
  1. <?php
  2.  
  3. /**
  4.  * Metoda wyszukuje wyrazy, ktore mozna ulozyc z liter
  5.  * 
  6.  * @param string $letters - literki
  7.  * @resurn aray of mixed - pasujace wyrazy
  8.  * @acces public
  9.  */
  10. private function searchWordByLetters( $letters ) {
  11. $letters = trim( $letters );
  12. $length = strlen( $letters );
  13.  
  14. $query = "SELECT * FROM slowa_".$length." WHERE slowo ~ '[".$letters."]{".$length."}'";
  15.  
  16. $objects = $this->conn->getAll( $query );
  17.  
  18. $lettersTable = str_split( $letters );
  19.  
  20. foreach( $objects as $key => $value ) {
  21. $resultTable = str_split( $value["slowo"] );
  22.  
  23. $diff = array_diff( $lettersTable, $resultTable );
  24.  
  25. if( count( $diff ) > 0 ) {
  26. unset( $objects[$key] );
  27. }
  28. }
  29. sort( $objects );
  30.  
  31. return $objects;
  32. }
  33. ?>

wyszukujac wszystkie slowa o dlugosci 4 zawierajace dane xxx litery a nastepnie odfiltrowywuje niepotrzebne.

Gdybym mogl od razu zawezic przedzial to wyszukanie zajeloby mi mniej czasu i uzyskalbym przy okazji nowe mozliwosci wyszukiwania
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.