我是一名 Rubyist,试图在 PHP 中实现我的一些代码,但无法为这个特定的 def 获得等效的 PHP 代码。任何人都可以帮助我。提前致谢。
def check_condition(str)
str =~ SOME_REGEX
end
我是一名 Rubyist,试图在 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;
}
看看preg_match:
if (preg_match('/regex/', $string) {
return 1;
}
不是preg_match
吗?
function check_condition($str) {
return preg_match(SOME_REGEX,$str);
}
我认为没有等价物。
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