【问题标题】:what is equivalent of =~ of ruby in php?什么是 php 中 ruby​​ 的 =~ 的等价物?
【发布时间】:2013-06-11 07:42:09
【问题描述】:

我是一名 Rubyist,试图在 PHP 中实现我的一些代码,但无法为这个特定的 def 获取等效的 PHP 代码。谁能帮助我。提前致谢。

def check_condition(str)
  str =~ SOME_REGEX
end

【问题讨论】:

  • preg_match($regex,$string);
  • @CORRUPT 不是按位 NOT 运算符 吗?
  • @GrijeshChauhan 按位与SOME_REGEX ?
  • 按位是 ruby​​ 中的 & 和 php 中的 %

标签: php ruby regex preg-match


【解决方案1】:

在 PHP 中它看起来像:

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

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


额外的东西。阅读 preg_match 的手册页后,您知道该方法返回一个整数,即找到的匹配数。由于该方法在第一次匹配后返回,因此只能是 0 或 1。由于 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 中的正则表达式实现有很大帮助。我现在可以很好地解决这个问题 :)
  • 很高兴为您提供帮助。也许他们会实现=~ 运算符。 +1 for ruby​​ ;) 检查我的更新。
  • 是的,希望他们很快会。 :)
【解决方案2】:

看看preg_match:

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

【讨论】:

  • 也可以这样做:return preg_match('/regex/', $string).
【解决方案3】:

不是preg_match吗?

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

【讨论】:

    【解决方案4】:

    我认为没有等价物。

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

    =~however 返回匹配开始的位置,如果没有匹配则返回 nil。由于 nil 为假且包括零在内的所有数字均为真,因此可以进行布尔运算。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-16
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 2013-11-14
      • 2010-11-01
      相关资源
      最近更新 更多