5

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

def check_condition(str)
  str =~ SOME_REGEX
end
4

4 回答 4

10

在 PHP 中它看起来像:

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

不幸的是,与其他一些语言不同,PHP 中没有正则表达式匹配运算符。你必须调用一个函数。一般遵循preg_match()所谓的perl 兼容正则表达式(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;
}
于 2013-06-11T07:44:28.097 回答
5

看看preg_match

if (preg_match('/regex/', $string) {
    return 1;
}
于 2013-06-11T07:44:26.260 回答
5

不是preg_match吗?

function check_condition($str) {
    return preg_match(SOME_REGEX,$str);
}
于 2013-06-11T07:45:02.457 回答
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
于 2013-06-11T15:53:49.600 回答