用preg_match()连接正则表达式字符串中的变量 - php

我正在使用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 ) ) { ... }

参考方案

每当将变量连接到正则表达式模式时,都应通过将变量传递给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更安全,因为您没有考虑可能的特殊正则表达式字符(+[]{}/\$^?!:<=*.等)

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP:将字符串拆分为字母和数字部分的最佳方法 - php

我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…

用户名regex字母数字,仅带下划线 - php

我正在尝试为php的preg_match找到一个正则表达式,该表达式允许带下划线的字母数字字符,但下划线必须位于字符之间(而不是字符串的开头或结尾),并且彼此之间永远不能有2个下划线。例子:无效:_name na_me_ na__me 有效:na_me na_m_e 我发现其中的大部分适用于此功能,但不能避免出现重复的下划线:/^[A-Za-z][A-Za-…