【问题标题】:preg_last_error() saying no error when there appears to be an errorpreg_last_error() 在出现错误时说没有错误
【发布时间】:2011-06-26 14:56:24
【问题描述】:

编辑:我知道这是一个难以复制的问题,但如果有人能就导致此问题的可能原因提出建议,那将非常有帮助。

编辑:根据要求,这里是$content

http://pastebin.com/raw.php?i=tHecParp

这是一个提取的网页。 create|exited|deleted|updated 是样本,我正在寻找关键字 المحتجين。

以下代码在 while 循环中连续运行:

$pattern = "/(create|exited|deleted|updated)/";
$num_found = preg_match_all( $pattern, $content, $matches );

var_dump( $num_found );

if( $num_found === false )
{
    if (preg_last_error() == PREG_NO_ERROR) {
        var_dump( 'There is no error.' );
    }
    else if (preg_last_error() == PREG_INTERNAL_ERROR) {
        var_dump( 'There is an internal error!' );
    }
    else if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
        var_dump( 'Backtrack limit was exhausted!' );
    }
    else if (preg_last_error() == PREG_RECURSION_LIMIT_ERROR) {
        var_dump( 'Recursion limit was exhausted!' );
    }
    else if (preg_last_error() == PREG_BAD_UTF8_ERROR) {
        var_dump( 'Bad UTF8 error!' );
    }
    else if (preg_last_error() == PREG_BAD_UTF8_ERROR) {
        var_dump( 'Bad UTF8 offset error!' );
    }
}

我只是在读入$content的文本文件中寻找一些关键字。

输出

int(1)
int(1)
int(1)
int(1)
int(1)
bool(false)
string(18) "There is no error."
bool(false)
string(18) "There is no error."
bool(false)
string(18) "There is no error."

它找到一个关键字几次,然后开始返回 false。 在测试时,我保持$content 不变。因此它必须继续查找关键字,而不是返回 false。但是preg_last_error() 没有帮助。

谁能解释我为什么会弄错?

【问题讨论】:

  • 能不能看到内容,自己测试一下?
  • 能否展示整个循环,以便我们查看条件
  • 指向 $content 内容的 pastebin 链接似乎不起作用。另外,我们能否得到代码示例中包含的 while 循环和任何变量的声明?

标签: php regex preg-match-all


【解决方案1】:

您的源示例不完整,因此很难追查此问题。最可能的原因是,即使我使用的示例运行良好,但您的模式有问题。您的模式是否在循环中的某个时刻发生变化?如果您指定的模式编译失败,preg_match_all() 将返回FALSE,preg_last_error() 将返回PREG_NO_ERROR

还有其他极端情况,但这似乎是最有可能的。您能否更新指向 $content 的链接并提供 while 循环的完整源代码?

【讨论】:

    【解决方案2】:

    PCRE Limit had exceeded.

    您可以使用的图案大小有限制。

    编译后的最大长度 如果 PCRE,模式是 65539(原文如此)字节 使用默认内部编译 联动大小为 2。如果你想 处理正则表达式 真的很大,你可以编译 内部链接大小为的 PCRE 3 或 4(请参阅 README 文件中的 源代码分发和 pcrebuild 有关详细信息的文档)。在这些 情况下的限制是实质上 较大。然而,速度 执行速度较慢。

    http://www.pcre.org/pcre.txt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2021-10-18
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多