2013-06-11 15 views
5

Jestem Rubyist próbuje wdrożyć niektóre z mojego kodu w PHP i nie jest w stanie uzyskać odpowiednik kodu PHP dla tego konkretnego def.Can ktoś mi pomóc out.Thanks z góry.co jest odpowiednikiem = ~ ruby ​​w php?

def check_condition(str) 
    str =~ SOME_REGEX 
end 
+5

['preg_match()'] (http://php.net/preg-match)? – BlitZ

+0

preg_match ($ regex, $ string); – Robert

+0

@CORRUPT nie jest operatorem bitowym NOT **? ** –

Odpowiedz

10

W PHP wygląda:

function check_condition($str) { 
    return preg_match(SOME_REGEX, $str); 
} 

Niestety nie ma operator regex meczu w PHP w przeciwieństwie do niektórych innych językach. Będziesz musiał zadzwonić do funkcji. Postępuj zgodnie z instrukcją preg_match() i stroną manuala o tak zwanym perl compatible regular expresssions (preg).


Coś dodatkowego. Po przeczytaniu strony manuala preg_match wiesz, że metoda zwraca liczbę całkowitą, liczbę znalezionych dopasowań. Ponieważ metoda powraca po pierwszym dopasowaniu, może to być tylko 0 lub 1. Począwszy od luźnego systemu typowania PHP byłoby to dobre dla używania go w luźnych porównań jak:

if(check_condition($str)) { .... 
if(check_condition($str) == true) { ... 

Ale to nie będzie działać w ścisłej porównania:

if(check_condition($str) === true) { ... 

Dlatego byłoby dobrze pomysł, aby rzucić wartość zwracaną preg_match:

function check_condition($str) { 
    return (boolean) preg_match(SOME_REGEX, $str); 
} 

Aktualizacja

Pomyślałem trochę o mojej ostatniej sugestii i widzę problem z tym. preg_match() zwróci liczbę całkowitą, jeśli wszystko działa poprawnie, ale boolean FALSE, jeśli wystąpi błąd. Na przykład z powodu błędu składni w wzorze regex. Dlatego nie będziesz świadomy błędów, jeśli właśnie przesyłasz do boolean. użyłbym exceptions aby pokazać, że błąd został dzieje:

function check_condition($str) { 
    $ret = preg_match(SOME_REGEX, $str); 
    if($ret === FALSE) { 
     $error = error_get_last(); 
     throw new Exception($error['message']); 
    } 

    return (boolean) $ret; 
} 
+0

dzięki @ hek2mgl to pomogło mi bardzo zrozumieć implementację regex w php. Jestem w stanie dobrze z tym teraz :) – vivekporwal04

+0

miło ci pomogło. Może kiedyś zaimplementują operatora '= ~'. +1 dla ruby;) sprawdź moją aktualizację. – hek2mgl

+1

Tak, mam nadzieję, że wkrótce. :) – vivekporwal04

5

spojrzeć preg_match:

if (preg_match('/regex/', $string) { 
    return 1; 
} 
+0

Równie dobrze może to zrobić: 'return preg_match ('/ regex /', $ string)'. –

5

Czy to nie preg_match?

function check_condition($str) { 
    return preg_match(SOME_REGEX,$str); 
} 
0

Nie sądzę, że istnieje odpowiednik.

preg_match zwraca 1, jeśli wzór pasuje do danego tematu, 0, jeśli nie, lub FALSE, jeśli wystąpił błąd.

=~ jednak zwraca pozycję, w której rozpoczyna się mecz, lub zero, jeśli nie ma dopasowania. Ponieważ zero jest fałszywe, a wszystkie liczby, w tym zero, są prawdziwe, operacje boolowskie są możliwe.

puts "abcdef" =~ /def/ #=> 3 # don't know how to get this from a RegExp in PHP 
puts "Matches" if "abcdef"=~ /def/ #=> Matches 
Powiązane problemy