编辑:我知道这是一个难以复制的问题,但如果有人可以建议指出导致此问题的可能原因,那将非常有帮助。
编辑:根据要求,这里是$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/