零长度正则表达式和无限匹配?
发布时间:2020-12-14 06:24:07 所属栏目:百科 来源:网络整理
导读:在试图详细说明 this问题的答案时,我现在试图接受零长度正则表达式的行为/含义. 我经常使用www.regexr.com作为操场来测试/调试/理解正则表达式中发生的事情. 所以我们有这个最平庸的场景: 正则表达式是* 输入字符串是dgwawa (事实上??,这里的字符串是无关紧
在试图详细说明
this问题的答案时,我现在试图接受零长度正则表达式的行为/含义.
我经常使用www.regexr.com作为操场来测试/调试/理解正则表达式中发生的事情. 所以我们有这个最平庸的场景: 正则表达式是* 输入字符串是dgwawa 为什么报告此正则表达式将无限匹配的行为,因为它匹配前一个字符的零次出现? 为什么结果不能是6个匹配,每个字符位置一个(因为在每个字符,无论是否是a,都有匹配,因为零匹配是匹配的)? 它是如何进入无限匹配的?所以它不会一次检查/进行一个角色? 我想知道它是如何/在哪里进入无限循环.
regexr.com在线正则表达式测试程序专为JavaScript正则表达式测试而设计.当传递与空字符串匹配的模式时,JavaScript正则表达式引擎不会自动移动索引.
这就是为什么当您需要模拟.NET Regex.Matches,PHP preg_match_all,Python re.finditer等中观察到的行为时,您需要手动推进索引以测试每个位置. 见regex101.com test: var re = /a*/g; var str = 'dgwawa'; var m; while ((m = re.exec(str)) !== null) { if (m.index === re.lastIndex) { // <- this part re.lastIndex++; // <- here } // <- is important document.body.innerHTML += "'" + m[0] + "'<br/>"; } 如果删除if块,则会得到无限循环. 关于这方面,有两件非常重要的事情需要提及: >始终使用适当的在线正则表达式测试程序来编写您的编程语言>避免使用可以匹配空字符串的非锚定模式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读