PHP中与Ruby的=~等效的是什么?

5

我是一名Ruby程序员,正在尝试用PHP实现我的一些代码,但无法得到这个特定def的等效PHP代码。有人能帮帮我吗?提前感谢。

def check_condition(str)
  str =~ SOME_REGEX
end

5
preg_match()是一个PHP函数,用于在字符串中搜索与正则表达式匹配的内容。如果找到匹配项,则返回1;如果没有找到,则返回0。这个函数还可以使用括号来捕获子模式,并将它们存储在一个数组中。 - BlitZ
preg_match($regex,$string); - Robert
@CORRUPT 不是按位非运算符吗? - Grijesh Chauhan
@GrijeshChauhan 用 SOME_REGEX 进行位运算? - BlitZ
位运算符在 Ruby 中是 &,而在 PHP 中是 % - Dave Chen
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;
}

感谢@hek2mgl,这篇文章帮助我很多,让我更好地理解了PHP中的正则表达式实现。现在我能够很好地使用它了 :) - vivekporwal04
很高兴能帮到你。也许他们会实现=〜运算符。Ruby加1分 ;) 请查看我的更新。 - hek2mgl
1
希望他们很快能够做到。 :) - vivekporwal04

5

请看preg_match

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

也可以这样写:return preg_match('/regex/', $string) - Amal Murali

5

难道不是使用preg_match吗?

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

0

我认为没有相应的等价物。

preg_match如果模式匹配给定的主题,则返回1,如果不匹配则返回0,如果发生错误则返回FALSE。

=~然而返回匹配开始的位置,如果没有匹配则返回nil。由于nil是false,所有数字包括零都是true,因此可以进行布尔运算。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接