Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyr. regularne
Forum PHP.pl > Forum > PHP
laq
jak zapisac w wyrazeniu regularnym np. " wszystkie znaki poza "b" "?

pozdrawiam
ghostrider
  1. <?php
  2. $reg = "/(([^b]*))/";
  3. ?>


ale niewiem czy to to o co chodzi,
laq
Kod
$test="b";
if(preg_match(jesli_test_to_znak_inny_niz_b, $test)) echo"ok"; else echo"nie ok";

wiec Twoj kod nie dziala. chodzi mi dokladnie o takie cos, wiem ze mozna to zrobic odwrotnoscia (jesli_test_to_b).
marast78
wystarczy tak:
pod pojęciem wszystki znaki rozumiem, że chodzi ci o litery tylko??
  1. <?php
  2.  
  3. if(ereg("[a-zA-Z]",$ciag) && !ereg("[bB]",$ciag))  $flag=true;
  4. else $flag=false;
  5.  
  6. ?>


lub

  1. <?php
  2.  
  3. if(eregi("[acdefghijklmnoprstvuwxyz]",$ciag))  $flag=true;
  4. else $flag=false;
  5.  
  6. ?>


gdy chodzi o wszystkie znaki jakie można uzyskac z klawiatury to

  1. <?php
  2.  
  3. if(!ereg("[bB]",$ciag))  $flag=true;
  4. else $flag=false;
  5.  
  6. ?>




gdy $flag=true to nie ma b, można kombinowac na wiele sposobów, chciałeś z ereg wiec opisałem z ereg winksmiley.jpg

można też użyć strstr() -> chyba nawet szybciej działa
laq
chodzi mi o wszystkie możliwe znaki i tak jak pisalem - nie o odwrotnosc.

jezeli ktos dalej nie rozumie, to chodzi o cos takiego: pseudokod:

.-b (wszystkie znaki minus "b")
rozumiem, ze nie ma takiego sposobu?
ghostrider
  1. <?php
  2. $reg = "/([^b])/";
  3.  
  4. $test = "b";
  5. $test2 = "c";
  6.  
  7. if( preg_match($reg, $test, $match1) ) echo"$test is ok<br />"; else echo "$test is nie ok<br />";
  8. if( preg_match($reg, $test2, $match2) ) echo"$test2 is ok<br />"; else echo "$test2 is nie ok<br />";
  9. ?>

tak zadziala na jednej literze, ale cos mi sie nie wydaje ze to dokladnie to czego szukasz, bo nie zadziala na wiecej niz jedej literze.

Cytat
.-b (wszystkie znaki minus "b")

to właśnie [^b]

moze napiszesz dokladnie jaki masz problem, tak latwiej szuka sie rozwiazania.

wykombionowalem cos takiego jesze:

  1. <?php
  2. $reg = "/^((?<!b)([^b]*?)(?!b))$/im";
  3.  
  4. $test = "string with b and some chars";
  5. $test2 = "string with no * and some chars";
  6.  
  7. if( preg_match($reg, $test, $match1) ) echo"$test is ok<br />"; else echo "$test is nie ok<br />";
  8. if( preg_match($reg, $test2, $match2) ) echo"$test2 is ok<br />"; else echo "$test2 is nie ok<br />";
  9. ?>


to zdaje sie spelniac twoje warunki, ale to dziwne rozwiazanie ...
lukir
Myślę, że strstr będzie lepsze (szybsze) (jeżeli dobrze oczywiście rozumiem temat... tongue.gif )
  1. <?php
  2.  if(!strstr($ciag, "b")) {
  3.  //ok - nie znaleziono znaku "b".
  4.  } else {
  5.  //niestety znak "b" wystąpił w ciągu.
  6.  }
  7. ?>
marast78
przeczytaj do końca to co napisałem snitch.gif

  1. <?php
  2.  
  3. if(!ereg("[bB]",$ciag)) $flag=true;
  4. else $flag=false;
  5.  
  6.  
  7. ?>


a znak ^ również moze być, bo przecież najprostszym sposobem jest zanegowanie prawdy smile.gif czyli jeżeli nie znajdzie b to ok
lukir
Nie, tu nie ma wątpliwości, że najlepsze jest Twoje zastosowanie, ale założyciel tematu nie do końca chyba wie o co mu chodzi, bo gdy podajemy różne, dobre rozwiązania tego "problemu" on nadal utrzymuje, że to jego problemu nie rozwiązuje...

Po prostu dorzuciłem kolejną opcję, żeby założyciel miał większy wybór metod tongue.gif.
ghostrider
dla zaineresowych :

http://weitz.de/regex-coach/

ciekawy programik do edycji wyrazen regularnych
lukir
@laq:
To na pewno się przyda, ale nadal nie wiemy czy nasze porady Ci się przydały...
I nadal nie wiemy, czy ten problem nie jest przypadkiem bardziej skomplikowany.
laq
odpowiedz na moje pytanie to "[^b]", podal ja juz w pierwszej odpowiedzi ghostrider - serdeczne dzieki. nie wiem czemu, gdy sprawdzalem to za 1. razem to nie zadzialalo... no a lukirowi i marastowi78 zycze lepszego czytania ze zrozumieniem (a sobie lepszego sprawdzania skryptow) winksmiley.jpg. pozdrawiam
marast78
hehe spoko ja zrozumiałem dobrze tylko ty ciagle nie rozumiesz co napisałem 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.