我是一名Ruby程序员,正在尝试用PHP实现我的一些代码,但无法得到这个特定def的等效PHP代码。有人能帮帮我吗?提前感谢。
def check_condition(str)
str =~ SOME_REGEX
end
我是一名Ruby程序员,正在尝试用PHP实现我的一些代码,但无法得到这个特定def的等效PHP代码。有人能帮帮我吗?提前感谢。
def check_condition(str)
str =~ SOME_REGEX
end
在PHP中,它看起来像:
function check_condition($str) {
return preg_match(SOME_REGEX, $str);
}
很不幸,与其他一些语言不同,在PHP中没有正则表达式匹配运算符。你需要调用一个函数。请查看preg_match()
手册以及所谓的Perl兼容正则表达式(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;
}
=〜
运算符。Ruby加1分 ;) 请查看我的更新。 - hek2mgl请看preg_match:
if (preg_match('/regex/', $string) {
return 1;
}
return preg_match('/regex/', $string)
。 - Amal Murali难道不是使用preg_match
吗?
function check_condition($str) {
return preg_match(SOME_REGEX,$str);
}
我认为没有相应的等价物。
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
preg_match()
是一个PHP函数,用于在字符串中搜索与正则表达式匹配的内容。如果找到匹配项,则返回1;如果没有找到,则返回0。这个函数还可以使用括号来捕获子模式,并将它们存储在一个数组中。 - BlitZSOME_REGEX
进行位运算? - BlitZ&
,而在 PHP 中是%
。 - Dave Chen