Php 为什么这个正则表达式会返回错误? 为什么下面的计算结果为true?

Php 为什么这个正则表达式会返回错误? 为什么下面的计算结果为true?,php,regex,html-parsing,wamp,preg-match-all,Php,Regex,Html Parsing,Wamp,Preg Match All,我总是得到: 信息:已找到课程 错误:找不到课程详细信息/流 奇怪的是,其他正则表达式函数调用似乎是如何工作的,但不是最后一个 注意: 这个正则表达式以前是有效的(实际上更复杂)。我不确定这是否重要,但我更新了我的WAMP版本(因此我的php.ini等被重置),上周在排除MongoDB连接问题时,我把设置搞乱了。您可能会检查您的设置。它必须低得离谱才能阻止正则表达式匹配输入,但你确实说过你一直在搞乱设置 您可以尝试通过更改正则表达式来测试它。当我在RegexBuddy中测试它时,您的regex

我总是得到:

信息:已找到课程
错误:找不到课程详细信息/流

奇怪的是,其他正则表达式函数调用似乎是如何工作的,但不是最后一个


注意:

这个正则表达式以前是有效的(实际上更复杂)。我不确定这是否重要,但我更新了我的WAMP版本(因此我的php.ini等被重置),上周在排除MongoDB连接问题时,我把设置搞乱了。

您可能会检查您的设置。它必须低得离谱才能阻止正则表达式匹配输入,但你确实说过你一直在搞乱设置

您可以尝试通过更改正则表达式来测试它。当我在RegexBuddy中测试它时,您的regex在1216个步骤中匹配了该输入。当我把它改成这个:

'%<tr.*?>.*?<b>.*?</b>[^<]*(?:<(?!/?tr\b)[^<]*)*</tr>%ims'
“%.*?*?[^您可以检查您的设置。它必须低得离谱才能阻止正则表达式匹配该输入,但您确实说过您一直在搞乱设置

您可以尝试通过更改正则表达式来测试它。当我在RegexBuddy中测试它时,您的正则表达式在1216个步骤中匹配了该输入。当我将其更改为此:

'%<tr.*?>.*?<b>.*?</b>[^<]*(?:<(?!/?tr\b)[^<]*)*</tr>%ims'

“%.*?*?[^我添加第二个答案是为了回应您在发布第一个答案后添加的新信息。我的目标是帮助您将系统恢复到正则表达式工作时的先前状态。我倾向于同意我链接到的页面上的评论,他们说默认设置过于保守。因此我支持这一点我没有回答,但我不想让任何人认为他们可以通过向正则表达式中添加更多内存来解决所有的正则表达式问题

现在我已经看到了您的真实regex,我不得不说您还有另一个问题。我根据您在RegexBuddy中链接的页面测试了第三个regex,结果如下:


(?ims)。*?*?*?第一科学研究领域。*?*?*?*?*?*?*?*(*?)*(*?)*(*?)学分。*?*?(**?我添加第二个答案是为了回应您在发布第一个答案后添加的新信息。我的目标是帮助您将系统恢复到正则表达式工作时的先前状态。我倾向于同意我链接到的页面上的评论者的意见,他们说默认设置过于保守。因此我支持t答案是肯定的,但我不想让任何人认为他们可以通过增加内存来解决所有的正则表达式问题

现在我已经看到了您的真实regex,我不得不说您还有另一个问题。我根据您在RegexBuddy中链接的页面测试了第三个regex,结果如下:


(?ims)。*?*?*?第一科学研究领域。*?*?*?*?*?*?*?*(*?)*(*?)*(*?)学分。*?*?(.*)因为你正在HTML上使用它,即使你这次找到了一个聪明的解决方案,明天当你更新你的___;.FWIW时它也会失败,这可能与区分大小写有关吗?@Amarghosh我用正则表达式解析了整个HTML模块:哦,我们的CS部门的负责人也教了这个模块!源不是xHTML有关系吗?来源:@Amarghosh我有
I
在定界符后面…这使得它不区分大小写看起来应该对我有用。只是在黑暗中拍摄,但也许可以尝试更改您的定界符(#而不是%)@ChristopherJohnson谢谢,但没有,因为你正在HTML上使用它,即使你这次找到了一个聪明的解决方案,明天当你更新你的uuuuuuuuuuuuiw.FWIW时它也会失败,这可能与区分大小写有关吗?@Amarghosh我用正则表达式解析了整个HTML模块:哦,我们的CS部门负责人也教了这个模块!源代码重要吗xHTML不是吗?来源:@Amarghosh我在定界符后面有
I
,这使得它不区分大小写。这对我来说应该是可行的。只是在黑暗中拍摄,但也许可以尝试更改您的定界符(#而不是%)@ChristopherJohnson谢谢,但是没有。regex也返回了
false
。我在我的php.ini中找到了
;pcre.backtrack\u limit=100000
,并将其更改为
pcre.backtrack\u limit=100000
,但这没有什么区别。结果是,取消了
backtrack\u limit
行的注释并添加了三个零,对其进行排序;即。
pcre.backtrack\u limit=100000000
该正则表达式也返回了
false
。我在php.ini中找到了
;pcre.backtrack\u limit=100000
,并将其更改为
pcre.backtrack\u limit=100000
,但这没有什么区别,因为结果是取消了
backtrack\u limit
行的注释,并添加了三个零;即
pcre.回溯限制=100000000
'%<tr.*?>.*?<b>.*?</b>[^<]*(?:<(?!/?tr\b)[^<]*)*</tr>%ims'