Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式不工作,尽管在正则表达式101中成功匹配_Php_Regex_Pcre - Fatal编程技术网

PHP正则表达式不工作,尽管在正则表达式101中成功匹配

PHP正则表达式不工作,尽管在正则表达式101中成功匹配,php,regex,pcre,Php,Regex,Pcre,我遇到了最奇怪的问题。我试着在这里引用其他类似的答案,但似乎没有一个能解决我的问题 我在PHP中有以下正则表达式 /if\s+(?:(.*?)\s*=\s*(?:UrlStatus | DeadURL)在数组中(?:UrlStatus | DeadURL),\s*(.*?)\s*然后\s+本地\s+拱形文本\s+=\s+cfg.messages\['archive'];(?:(?:\n |。)*?如果\s+(?:(.*?)\s*==\s*(?:UrlStatus | DeadURL)|在数组中\

我遇到了最奇怪的问题。我试着在这里引用其他类似的答案,但似乎没有一个能解决我的问题

我在PHP中有以下正则表达式

/if\s+(?:(.*?)\s*=\s*(?:UrlStatus | DeadURL)在数组中(?:UrlStatus | DeadURL),\s*(.*?)\s*然后\s+本地\s+拱形文本\s+=\s+cfg.messages\['archive'];(?:(?:\n |。)*?如果\s+(?:(.*?)\s*==\s*(?:UrlStatus | DeadURL)|在数组中\s*(?:UrlStatus | DeadURL),\s*(.*?\s*)\s*那么\s+存档=sepc\)?/im

我知道这是一个混乱的正则表达式,它应该解析来自不同位置的不同版本模块的代码。它在regex101中工作得很好,但preg_match返回false,表示发生了错误。您看到的正则表达式直接从var_转储中提取。从var_转储中还提取了正在测试的字符串。我在下面附上了应该与之匹配的摘录

    if is_set(ArchiveURL) then
        if not is_set(ArchiveDate) then
            ArchiveDate = seterror('archive_missing_date');
        end
        if "no" == DeadURL then
            local arch_text = cfg.messages['archived'];
            if sepc ~= "." then arch_text = arch_text:lower() end
            Archived = sepc .. " " .. substitute( ```

In the full block of text it takes 81,095 steps to match.  
Could it have something to do with that?

从preg_last_error()读取数据时,返回6,这映射到常量preg_JIT_STACKLIMIT_error

PHP7使用JIT编译器进行preg_匹配,堆栈大小限制较小。禁用它允许preg_match执行其工作


这可以在php.ini文件中完成,也可以在脚本中使用
ini\u集('pcre.jit',false)动态完成

您是否查看了输出?您是否听说过我们的主和救世主,regex
/x
可读性标志?@Nick it似乎返回PREG\u JIT\u STACKLIMIT\u错误。虽然我不知道如何修复它。@Cyberpower678在常量定义中有一个关于禁用
JIT
的注释@Nick Stackoverflow是一个美丽的地方$old=ini_集('pcre.jit',false);做了这个把戏,现在它匹配了D