当前位置: 首页 > 编程笔记 >

Regular Expressions 为什么回溯会成为陷阱?

殷安顺
2023-03-14
本文向大家介绍Regular Expressions 为什么回溯会成为陷阱?,包括了Regular Expressions 为什么回溯会成为陷阱?的使用技巧和注意事项,需要的朋友参考一下

示例

回溯可能由可选的量词或替代结构引起,因为正则表达式引擎将尝试探索每条路径。如果您运行的正则表达式a+b对aaaaaaaaaaaaaa没有匹配,发动机会发现它非常快。

但是,如果您将正则表达式更改(aa*)+b为组合数,则组合数将快速增长,并且大多数(未优化的)引擎将尝试探索所有路径,并且将花很长时间才能尝试找到匹配项或引发超时异常。这称为灾难性回溯

当然,这(aa*)+b似乎是一个新手错误,但这是在说明问题,有时您会遇到同样的问题,但模式会更加复杂。

正则表达式会发生更严重的灾难性回溯情况(x+x+)+y(您可能在此之前和此处已经看到过),这需要花费指数时间才能确定包含xs且没有其他内容(例如xxxxxxxxxxxxxxxxxxxx)的字符串与之不匹配。

如何避免呢?

尽可能具体,尽可能减少可能的路径。请注意,某些正则表达式匹配器不容易回溯,例如其中包含的awk或grep基于汤普森NFA的正则表达式匹配器。

 类似资料:
  • 本文向大家介绍为什么float会导致父元素塌陷?相关面试题,主要包含被问及为什么float会导致父元素塌陷?时的应答技巧和注意事项,需要的朋友参考一下 “当元素设置浮动后,会自动脱离文档流”, 翻译成白话就是说,元素浮动后,就不在整个文档流的管辖范围,那么它之前存在在父元素内的高度就随着浮动不复存在了,而此时父元素会默认自己里面没有任何内容 (前提是未给父元素设置固定高度,如果父元素本身有固定高度

  • 本文向大家介绍什么是回溯法 (Backtracking)?相关面试题,主要包含被问及什么是回溯法 (Backtracking)?时的应答技巧和注意事项,需要的朋友参考一下 找到所有选择,走不通则回溯 假定问题的解是一个向量(a1,a2,a3,...,an),其中的每个元素ai都是问题的一个元素 步骤: 建立一个问题的部分解v=(a1,a2,...,ak) 若这个部分解是可行解,则继续,若不是可行解

  • 我一直在监控我的应用程序错误,我看到下面的错误太多次了 错误:14077410:SSL例程:SSL23\u GET\u SERVER\u HELLO:sslv3警报握手失败(外部/openssl/SSL/s23\u clnt.c:741 0xaa48cd5c:0x00000000)-javax。网ssl。SSLHandshakeException:javax。网ssl。SSLProtocolExc

  • 今天当我重新浏览Veracode的时候重新打开了一系列的线路比如... 为什么被认为是“网页中与脚本相关的HTML标记的不正确中和(基本XSS”缺陷)?以及为什么今天突然出现,以前从未在任何其他扫描中出现过。 这似乎对我来说很好,或者如果不是,如何修复/mitagate?

  • 问题内容: 在这段代码中,为什么使用结果为no 或循环捕获所有异常然后静默退出?在这种情况下,为什么会有多余的?还是由以下 原因引起的? 假设由触发。什么时候产生的? 如果我手动执行以下操作: 在这种情况下,为什么看不到追溯? 问题答案: 该循环监听明确。 该语句的目的是循环遍历迭代器提供的序列,并使用异常表示当前迭代器已完成。不会捕获被迭代的对象引发的其他异常,只是那个异常。 这是因为正常的预期

  • 因此,可以将自动变量初始化为陷阱表示,而不会导致未定义的行为,但在变量中存储适当的值之前,不能使用该变量的值。 事实上,他们两个我都听不懂。