什么相当于PHP中的~~ ruby​​?

时间:2013-06-11 07:42:09

标签: php ruby regex preg-match

我是一名Rubyist,试图在PHP中实现我的一些代码而无法获得这个特定def的等效PHP代码。任何人都可以帮助我。谢谢。

def check_condition(str)
  str =~ SOME_REGEX
end

4 个答案:

答案 0 :(得分:10)

在PHP中看起来像:

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

不幸的是,与其他语言不同,PHP中没有正则表达式匹配运算符。你必须调用一个函数。请遵循preg_match()手册和一般所谓的perl compatible regular expresssions(preg)手册页。


额外的东西。在阅读了preg_match的手册页后,您知道该方法返回一个整数,即找到的匹配数。由于该方法在第一次匹配后返回,因此只能是01。从PHP的松散类型系统开始,这将有利于在松散的比较中使用它,如:

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);
}

更新

我已经考虑了一下我的最后一个建议,我发现这个问题。如果一切正常,preg_match()将返回一个整数,但如果发生错误,则返回布尔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;
}

答案 1 :(得分:5)

查看preg_match

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

答案 2 :(得分:5)

不是preg_match吗?

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

答案 3 :(得分:0)

我认为没有相应的东西。

如果模式与给定主题匹配,则

preg_match返回1,否则返回0;如果发生错误,则返回FALSE。

然而,

=~会返回匹配开始的位置,如果没有匹配则返回nil。由于nil为false且所有包含零的数字都为真,因此可以进行布尔运算。

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