Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrazenie regualrne, wystapienie calego zestawu znakow
Adiasz
post
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 28.02.2004

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Vogel
post
Post #2





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

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


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

Kod
#abcd|abdc|acbd|acdb|itd.|etc.|...#si
Go to the top of the page
+Quote Post
Adiasz
post
Post #3





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 28.02.2004

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


generowanie wszystkich permutacji zbioru juz np 10 elem nie bedzie zbyt wydajne, ale dzieki, moze ktos inny ma lepszy pomysl?
Go to the top of the page
+Quote Post
phobos
post
Post #4





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 7.04.2006

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


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. ?>
Go to the top of the page
+Quote Post
Adiasz
post
Post #5





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 28.02.2004

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


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 07:48