php - preg_last_error() 看似有错误却说没有错误

标签 php regex preg-match-all

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

编辑:根据要求,这里是$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() 没有帮助。

谁能解释一下为什么我得到的是假的?

最佳答案

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

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

关于php - preg_last_error() 看似有错误却说没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987407/

相关文章:

php - Symfony Doctrine 2 PostRemove 删除文件奇怪行为

php - 将\n 另存为 <br> 从 textarea 到数据库

regex - 多行 C# 正则表达式在空行后匹配

php - preg_match_all 只匹配一个

php - 使用 PHP preg_match_all,获取 href 的值

php - MYSQL fetch_array 创建无限循环;

r - 使用空格和大写字母分割字符串

java - 如果字符串仅匹配 Java 中的一组,则使用正则表达式来匹配该字符串

php - 使用 preg_match_all() 获取重复匹配项

php - PDO 查询在应返回行时返回 0