我正在使用preg_match()
函数来确定函数是否已执行。
if( preg_match( '/^([0-9]+,){0,3}[0-9]+$/', $string ) ) { ... }
但是我必须使用整数变量并将其集成到正则表达式中:
$integer = 4;
if( preg_match( '/^([0-9]+,){0,' . $integer . '}[0-9]+$/', $string ) ) { ... }
但它应该什么时候不匹配。我怎么不能连接正则表达式字符串中的变量?
修改
strval($integer)
解决了我的问题。我必须在连接它之前将整数值转换为字符串(虽然我不明白为什么):
$integer = 4;
if( preg_match( '/^([0-9]+,){0,' . strval($integer) . '}[0-9]+$/', $string ) ) { ... }
答案 0 :(得分:1)
每当将变量连接到正则表达式模式时,您应该通过将变量传递给the preg_quote
function来实现。
但是,如果变量var与示例4
中的变量一样,则不会有任何区别。您正在使用的模式是:
/^([0-9]+,){0,4}[0-9]+$/
在这种情况下,如果它不起作用:检查$string
值,并使确定模式匹配。顺便说一下,/^(\d+,){,4}\d+$/
更短,做同样的事情。
调用strval
无法解决任何问题,AFAIK ...我使用以下代码段测试了代码而不是strval
:
$string = '1234,32';
if (preg_match( '/^([0-9]+,){0,4}[0-9]+$/', $string) )
{
echo 'matches',PHP_EOL;
$count = 4;
if (preg_match( '/^([0-9]+,){0,'.$count.'}[0-9]+$/', $string ) )
echo 'matches, too',PHP_EOL;
}
正如我预期的那样输出:
matches
matches, too
在你的情况下,我只想写:
$count = 4;
preg_match('/^(\d+,){,'.preg_quote($count, '/').'}\d+$/', $string);
这是无可否认比仅仅调用strval
更安全,因为您没有考虑可能的特殊正则表达式字符(+[]{}/\$^?!:<=*.
等)