我是一名Rubyist,试图在PHP中实现我的一些代码而无法获得这个特定def的等效PHP代码。任何人都可以帮助我。谢谢。
def check_condition(str)
str =~ SOME_REGEX
end
答案 0 :(得分:10)
在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;
}
答案 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