PHP 构建或替换部分正则表达式


php build or replace part of regular expression

我有这个正则表达式,我想用他们想要使用的权重传递的参数替换"lb"部分,所以我有这个

protected function validateCheckWeight($attribute, $value, $parameters) 
{        
    // this always outputs correctly either true or false
    return preg_match('/^(?!0'd|0lb$)'d+(?:'.'d+)?lb$/', $value);
}

我想要的是这个,但在进行验证时不起作用

protected function validateCheckWeight($attribute, $value, $parameters) 
{        
    return return preg_match('@/^(?!0'd|0' . $parameters[0] .'$)'d+(?:'.'d+)?' . $parameters[0] . '$/@', $value);    
}

protected function validateCheckWeight($attribute, $value, $parameters) 
{   
    dd('@/^(?!0'd|0' . $parameters[0] .'$)'d+(?:'.'d+)?' . $parameters[0] . '$/@');
    // output "@/^(?!0'd|0kg$)'d+(?:'.'d+)?kg$/@"
    return preg_match('@/^(?!0'd|0' . $parameters[0] .'$)'d+(?:'.'d+)?' . $parameters[0] . '$/@', $value);
    // this always outputs false
}

您的正则表达式中有 2 个不同的分隔符,@/ 。我刚刚确认,如果您从正则表达式的开头和结尾删除@,您的函数将为您的注释中提到的输入返回 true($value = "kg"$parameters = array('kg') )。

如果我正确理解这个问题,你可以

return strlen(parameters[0]) == strlen(rtrim(parameters[0],'lb'));

但我认为再次不正确理解这一点。