[PHP] Problem z wyrażeniem regularnym


(Krzkaczor) #1

Hej!

Mam problem z prostym wyrażenim regularnym o_O Cały kod:

if (preg_match('/^.*[Error].*$/',$text)) {

    echo 'zle';

} else echo 'OK';

Co jest źle?

Prosze o pomoc i pozdrawiam


(Sawyer47) #2

Jaki konkretnie problem? Samo wyrażenie regularne jest raczej poprawne.


(Krzkaczor) #3

Wywala cały czas OK nie zależnie od tego czy słowo Error występuje w $text czy nie...


(Sawyer47) #4

Nie dopasuje zawsze. Jeżeli chcesz dopasować słowo "Error" napisz po prostu Error. Natomiast nawiasy kwadratowe tworzą grupę, to której pasują znaki w tej grupie. [Error] będzie pasować do 'E', 'r' oraz 'o'.


(Spam) #5

Musisz wyeskejpować nawiasy kwadratowe :wink:


(Krzkaczor) #6

W sumie to ciągle było bez [] a pod koniec jak kombinowałem to dołorzyłem... tak czy siak też nie działa

if (preg_match('/^.*Error.*$/',$text)) {

(Spam) #7
preg_match('/^.*?\[Error\].*?$/', $text)

Inna sprawa, że te gwiazdki po bokach nie są potrzebne.

preg_match('/\[Error\]/', $text)

Czyli generalnie nie ma sensu zatrudniać regexpów do tego, wystarczy funkcja strpos :

<?php echo (strpos($text, '[Error]') === FALSE) ? 'ok' : 'źle';

(Krzkaczor) #8

Dzięki, działa ale jeszcze nie do końca

if (strpos($text, "[Error]") === FALSE) {

            $aError[] = $i+1;

            echo "ZNALEZIONE $i";

        }

to wszystko jest w pętli i choć $text się zmienia (i w końcu jest bez texty error) cały czas wywala że znaleziono błąd o_O i w ogóle po co są [] w tym: strpos($text, "[Error]") ?

Proszę o pomoc i pozdrawiam


(Spam) #9

Przecież ciągu „[Error]” chciałeś szukać ;/

strpos zwróci FALSE, jeśli dany ciąg nie został znaleziony.


(Krzkaczor) #10

Dobra thx, już ogarnąłem :slight_smile: