如何在运行时间过长时终止Matcher.find()?

Fra*_*gle 7 java regex matcher

想知道终止长时间运行的正则表达式匹配的技术(java matcher.find()方法).也许子类化Matcher并添加一些逻辑以在x次迭代后终止?

基本上我是使用遗传算法生成正则表达式,所以我没有很多控制它们.然后我针对某些文本测试每个文本以查看它们是否与文本的某个目标区域匹配.

因为我有点随机生成这些正则表达式,我得到了一些疯狂的东西,它吃了大量的cpu和一些find()调用需要一段时间来终止.我宁愿在一段时间后杀死它们,但不确定最好的方法.

如果有人有想法,请告诉我.

San*_*rma 0

一种可能的解决方案是在单独的线程中生成“匹配”,它的优点是不会阻塞主线程。您可以创建一个自定义,它会在持续时间/阈值到期后Callable返回,或者在成功时返回“匹配”结果。null