2013-06-11 4 views
5

Я рубист, пытающийся реализовать часть моего кода в PHP и не могу получить эквивалентный PHP-код для этого конкретного def.Can, кто-нибудь мне поможет. Спасибо заранее.Что эквивалентно = ruby ​​в 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 это не поразрядный оператор NOT **? ** –

ответ

10

В PHP это выглядит следующим образом:

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

К сожалению, нет оператора регулярных выражений матча в PHP в отличие от некоторых других языков. Вам нужно будет вызвать функцию. Следуйте руководству по эксплуатации preg_match() и странице руководства о так называемом perl compatible regular expresssions (preg) в целом.


Нечто дополнительное. После прочтения страницы руководства preg_match вы знаете, что метод возвращает целое число, количество найденных совпадений. Поскольку метод возвращает после первого совпадения, это может быть только 0 или 1. В рыхлой системы типизации РНР это было бы хорошо для его использования в свободных сравнениях, как:

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

Но это не будет работать в строгом сравнения:

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

Поэтому было бы хорошо идея бросить возвращаемое значение preg_match:

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

Update

Я немного подумал о своем последнем предположении, и я вижу проблему с этим. preg_match() вернет целое число, если все работает нормально, но boolean FALSE при возникновении ошибки. Например, из-за синтаксической ошибки в шаблоне регулярных выражений. Поэтому вы не будете знать об ошибках, если вы просто забрасываете boolean. Я хотел бы использовать exceptions, чтобы показать, что ошибка происходит:

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

спасибо @ hek2mgl, это помогло мне понять концепцию регулярного выражения в php.Я могу хорошо поступить с этим сейчас :) – vivekporwal04

+0

приятно помогать вам. Может быть, они когда-то реализуют оператор '= ~'. +1 для рубина;) проверьте мое обновление. – hek2mgl

+1

Да, надеюсь, они скоро. :) – vivekporwal04

5

Посмотрите на preg_match:

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

Может также просто сделать: 'return preg_match ('/ regex /', $ string)'. –

5

Разве это не preg_match?

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

Я не думаю, что есть эквивалент.

preg_match возвращает 1, если шаблон соответствует заданному объекту, 0, если он отсутствует, или FALSE, если произошла ошибка.

=~ однако возвращает положение, в котором начинается матч, или nil, если нет совпадения. Поскольку nil является ложным и все числа, включая нуль, истинны, возможны логические операции.

puts "abcdef" =~ /def/ #=> 3 # don't know how to get this from a RegExp in PHP 
puts "Matches" if "abcdef"=~ /def/ #=> Matches 
Смежные вопросы