你真的了解正则吗(2)----递归

前言

本文的递归不仅是在JavaScript环境下( 有些匹配操作符JavaScript环境下是不适用的 ) , 在PHP和java环境下 , 也适用
上一篇文章我们已经简单的介绍了正则的使用和正则匹配规则 , 这篇我们就好好说一下正则的递归

正则表达式递归

简单递归

在各类语言中 , 以下正则的递归操作符都是递归的意思

  • (?R)?
  • (?0)?
  • \g<0>?
  • 加号 , +
  • 星号 *
  • 问号 ? 一般来说问号也是递归的一种

例子

比如最简单的 /a+z+/ , 都可以用上面

  • a(?R)?z
  • a(?0)?z
  • a\g<0>?z

例子正则轨道图

这里附上/a+z+/的轨道图

 

标/a+z+/的轨道图.png题

 

说明

z全部匹配一个或多个字母a,后跟完全相同数量的字母z。由于这些正则表达式在功能上是相同的,因此我们将使用R的语法进行递归,以查看此正则表达式如何与字符串aaazzz匹配。

正则引擎实现步骤

首先,a匹配字符串中的第一个a。然后正则表达式引擎到达(?R)。这告诉引擎在字符串的当前位置再次尝试整个正则表达式。现在,a匹配字符串中的第二个a。发动机再次达到(?R)。在第二个递归上,a匹配第三个a。在第三次递归中,a不能匹配字符串中的第一个z。这导致(?R)失败。但是正则表达式使用量词使(?R)为可选。所以引擎继续z匹配字符串中的第一个z。

现在,正则表达式引擎已到达正则表达式的末尾。但是,由于递归有两个层次,因此尚未找到整体匹配项。它仅找到了(?R)的匹配项。匹配成功后退出递归,引擎也达到z。现在,它与字符串中的第二个z匹配。引擎的递归深度仍为一级,如果成功,则从该引擎退出。最后,z第三匹配z的的字符串中。引擎再次位于正则表达式的末尾。这次,它不在任何递归内。因此,它返回aaazzz作为整个正则表达式匹配项。

匹配平衡构造

递归的主要目的是匹配平衡构造或嵌套构造。通用正则表达式为b(?:m|(?R))*e,其中b是开始构造的地方,m是可能在构造中间出现的东西,e是可能在构造结束时出现的东西。为了获得正确的结果,b,m和e中的任何两个都不能匹配相同的文本。您可以使用原子组而不是非捕获组来提高性能:b(?>m|(?R))*e。现实世界中常见的用法是匹配一组平衡的括号。((?>[^()]|(?R))*)匹配一对括号,中间包含任意文本,包括不限数量的括号,只要它们都正确配对即可。如果主题字符串包含不平衡的括号,则第一个正则表达式匹配项是最左对的平衡括号,这可能发生在不平衡的开括号之后。如果您想要的正则表达式在包含不平衡括号的字符串中找不到任何匹配项,则需要使用子例程调用而不是递归。如果要查找多对平衡括号对的序列作为单个匹配项,则还需要一个子例程调用。

交替递归

如果平衡结构中间可能出现的内容也可以单独出现而没有开头和结尾部分,则通用正则表达式为
b(?R)*e|e|b , 同样b , m 和 e 都必须互斥 . ((?R)*)|[^()]+匹配一对平衡的括号,如上一节中的正则表达式。但是,它也匹配根本不包含任何括号的任何文本。此正则表达式在Boost中无法正常工作。如果某个正则表达式具有不在组内的替换,则在Boost中递归整个正则表达式只会尝试第一种选择。因此((?R)*)|Boost中的[^()]+匹配任意深度嵌套的任意数量的平衡括号,中间没有任何文本,或者根本不包含任何括号的任何文本。如果翻转选项,则[^()]+|((?R)*)在Boost中,任何不带括号的文本都将匹配,或者将一对带括号的文本与任何不带括号的文本匹配。在所有其他版本中,这两个正则表达式找到相同的匹配项。Boost的解决方案是将轮换放到一个组中。(?:((?R)*)|[^()]+)和(?:[^()]+|((?R)*))在本文讨论的所有情景中都找到相同的匹配项本教程支持递归。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值