Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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
C++ 如何检查正则表达式是否落入infty循环?_C++_Regex - Fatal编程技术网

C++ 如何检查正则表达式是否落入infty循环?

C++ 如何检查正则表达式是否落入infty循环?,c++,regex,C++,Regex,我正在努力学习,希望能在Qt中使用正则表达式 我发现一些模式会导致处理程序陷入循环。例如,在文本中搜索\b\b,永远不会终止。这些表达式的数量是无限的(\b\b\b,\b\b\b等等)。 我想确定并控制所有无效的表达式 是否有区分有效表达式和无效表达式的算法?如果没有,如何防止程序陷入无限循环?您可以使用任何在线正则表达式测试工具,如。 或者下载类似的内容并进行自定义:正则表达式不应该进入无限循环,但它们的计算可能需要很长时间 我建议使用具有超时/步长限制的API。如果您没有访问此类API的权限

我正在努力学习,希望能在Qt中使用正则表达式

我发现一些模式会导致处理程序陷入循环。例如,在文本中搜索
\b\b
,永远不会终止。这些表达式的数量是无限的(
\b\b\b
\b\b\b
等等)。 我想确定并控制所有无效的表达式


是否有区分有效表达式和无效表达式的算法?如果没有,如何防止程序陷入无限循环?

您可以使用任何在线正则表达式测试工具,如。
或者下载类似的内容并进行自定义:

正则表达式不应该进入无限循环,但它们的计算可能需要很长时间

我建议使用具有超时/步长限制的API。如果您没有访问此类API的权限,则在单独的线程或进程中运行代码,如果它没有及时响应,则将其杀死


如果搜索
\b\b
导致无限循环,则听起来您使用的正则表达式引擎中有一个bug。

您的正则表达式模式是根据用户输入还是其他内容构建的?为什么需要以编程方式检查此项?是的。它们是由用户输入构造的。这是C++吗?(基于qt标记)@Sorush-Rabiee:据我所知,正则表达式与语言无关在某种程度上,它们不是独立于语言的,但有一些非常不同的语法。我之所以这么问,是因为限制运行时更依赖于语言。好吧,这不是一个真正的答案。我想学习如何以编程方式检查表达式。@Sorush:查看RegEx引擎Qt在使用什么。然后获得一个开源的RegEx checker/tester并对其进行定制。从零开始实现正则表达式检查器需要一段时间。我认为没有bug。我尝试了kiki(用python编写并使用另一个实现)和另一个测试工具,得到了相同的结果。。。因此,\b\b应该有问题,或者在许多实现中存在相同的错误…@Sorush Rabiee:可能在多个实现中存在错误。默认的正则表达式模块
re
工作正常:
import re;print re.match(r'\b\b',abc def')
@Sorush:Python和Qt很可能都在后台使用PCRE库。如果是这样的话,它们在实现中也会有相同的bug。在我们开始查找bug之前,我想看看这种行为的一个例子@Sorush,请发布一些我们可以自己运行的代码,最好是在像