jjzjj

backtracking

全部标签

javascript - 如何使正则表达式不导致 “catastrophic backtracking” ?

当我尝试在javascript中运行以下代码时,浏览器由于灾难性的回溯而挂起,回溯无限循环可能是因为设计不当的正则表达式。我需要一个替代表达式或一种方法来防止这个问题:stringtemp="Testingrobustness{parent-area-identifierSometextinbetweenthetokens{parent-area-label}";varstrRegExp=newRegExp(/[{](?:[^{}]+|[{][^{}]*[}])*[}]/g);vararrMatch=temp.match(strRegExp); 最佳答案

javascript - 我怎样才能使这个正则表达式不导致 "catastrophic backtracking"?

我正在尝试使用从http://daringfireball.net/2010/07/improved_regex_for_matching_urls获得的URL匹配正则表达式(?xi)\b(#Capture1:entirematchedURL(?:https?://#httporhttpsprotocol|#orwww\d{0,3}[.]#"www.","www1.","www2."…"www999."|#or[a-z0-9.\-]+[.][a-z]{2,4}/#lookslikedomainnamefollowedbyaslash)(?:#Oneormore:[^\s()]+#Run

javascript - 当我的 RegEx 被执行并且与输入不匹配时,浏览器选项卡卡住

接下来就是问题了。我创建了一个具有验证的输入字段,这是有效数据:1-12、14、16、22、25-35、41、49、55-901230-1992,2001-2099,99311-2131,3,4,5,6,10全部基本上,这些数字的任意组合(范围、逗号分隔的范围、逗号分隔的数字、逗号后的空格、逗号后没有空格、单词:'all')我的正则表达式:/^(([0-9]{0,4},?\s{0,})+([0-9]{1,4}-[0-9]{1,4}){0,},?\s{0,})+$|^(全部)$|^([0-9]{1,4}-[0-9]{1,4}){0,},?\s{0,}$/它几乎可以正常工作,只有1个主要问

php - 为什么这个正则表达式模式不匹配?

这个问题在这里已经有了答案:Greedyvs.Reluctantvs.PossessiveQualifiers(7个答案)CansomeoneexplainPossessiveQuantifierstome?(RegularExpressions)(1个回答)关闭5年前。Regex101链接:https://regex101.com/r/MsZy0A/2我有以下正则表达式模式;.++b测试数据如下;aaaaaaaacaeb。我不明白的是“所有格量词”。我读过它不会回溯,它通常会这样做。但是,我认为无论如何都不必回溯?它只需要匹配包括“b”在内的所有内容,“b”将匹配两次,因为.+匹配所

PHP:意外的 PREG_BACKTRACK_LIMIT_ERROR

functionrecursiveSplit($string,$layer){$err=preg_match_all("/\{(([^{}]*|(?R))*)\}/",$string,$matches);echo"Elementitrovati:$err";if($err==FALSE)echo"preg_match_allERROR";//iteratethrumatchesandcontinuerecursivesplitif(count($matches)>1){for($i=0;$i0){echo"Layer".$layer.":".$matches[1][$i]."";rec

php - pcre.backtrack_limit 的 "unit"是什么?

我遇到一个问题,由于pcre.backtrack_limit,具有复杂正则表达式的preg_replace()会导致错误(PREG_BACKTRACK_LIMIT_ERROR)太低,默认设置为1,000,000。我将它设置为10,000,000,它适用于这个特定的应用程序。我的问题是,回溯限制松散定义的“单位”到底是什么?1,000,000数字是否对应于内存大小?如果不是,这意味着什么?我试图了解在我的环境中对此设置的合理设置。引用preg_replace:http://us3.php.net/manual/en/pcre.configuration.php#ini.pcre.back

java - 正则表达式模式灾难性回溯

我在我的一个旧Java系统中使用了下面显示的正则表达式,该系统最近导致了回溯问题。回溯线程经常导致机器的CPU达到上限,直到应用程序重新启动后才返回。谁能建议一种更好的方法来重写此模式或可以帮助我这样做的工具?图案:^\[(([\p{N}]*\]\,\[[\p{N}]*)*|[\p{N}]*)\]$工作值(value)观:[1234567],[89023432],[124534543],[4564362],[1234543],[12234567],[124567],[1234567],[1234567]灾难性回溯值——如果值中有任何错误(在末尾添加额外的大括号):[1234567],[

java - 使用启发式实现回溯搜索?

我对搜索算法和回溯编程非常感兴趣。现在,我已经实现了算法X(参见我的另一篇文章:Determineconflict-freesets?)来解决精确覆盖问题。这工作得很好,但我现在有兴趣用更基本的回溯变体来解决这个问题。我只是不知道如何做到这一点。问题描述同上:假设您有一堆集合,而每个集合都有几个子集。Set1={(香蕉、菠萝、橙子)、(苹果、羽衣甘蓝、cucumber)、(洋葱、大蒜)}Set2={(香蕉,cucumber,大蒜),(鳄梨,番茄)}...设置N={...}现在的目标是从每个集合中选择一个子集,而每个子集必须与任何其他选定的子集无冲突(一个元素不包含在任何其他选定的子集中

java - 数独解法

我的数独解法有问题。该程序是这样工作的;开始时棋盘是空的,用户在棋盘上添加几个数字,然后点击“求解”按钮,程序会尝试求解。除了将相同的数字放在同一行之外,一切正常。因此,如果用户添加1,1,0,0...0。在拼图中,它无法解决它,因为它的两个1彼此相邻,并且将永远继续尝试找到一个sulotion,即使它无法解决谜。但是,如果它们都是0(空),它会立即解决它,就像我将1和2放在左上角一样。如果我只是在其中放入一些随机数,它将检测到它无法解决(或者如果它是一个有效的谜题,它将解决它)我在想这句话,当theNumber==(row,col)等于thenNumber==(row+1,col)时

java - 数独生成器的递归求解

我正在尝试编写一种算法,以使用Java或Javascript创建合法的数独板。两者都不起作用,我不完全确定为什么。本质上,这两个程序中的问题是x或y的增量超过了应有的增量(跳过正方形)。我一辈子都弄不明白这是怎么回事。如果需要,我可以提供完成JS解决方案的HTML。我最好的猜测是它与我如何使用递归创建堆栈有关,但据我所知,它应该有效。在我的旧代码中有一个不正确的for循环,我知道这一点。我粘贴了一个旧版本,现在已修复。java:importjava.util.*;publicclassSudokuGenerator{//credit:cachao//http://stackoverfl