|
1
46
的确可以使用正向引用:
等等,瞧 ; 它在那里。这里从头到尾匹配一组完整的嵌套括号。每个匹配必须捕获并保存两个子串;这些对你没用。只需关注主要比赛的结果。 不,深度没有限制。不,这里没有隐藏的递归构造。只是简单的环顾四周,带有一点向前的参照。如果你的风格不支持转发引用(我在看你,JavaScript),那么我很抱歉。我真的是。我希望我能帮助你,但我不是一个奇怪的奇迹工作者。 这很好,但我也想匹配内部群体!好的,就这么定了。我们之所以能够匹配这些外部组,是因为它们不重叠。一旦我们想要的比赛开始重叠,我们必须稍微调整我们的策略。我们仍然可以检查主题是否正确平衡了括号组。然而,我们需要用这样一个捕获组来保存它们,而不是直接匹配它们:
与前一个表达式完全相同,只是我将其大部分包装在了一个前瞻中,以避免消耗角色,添加了一个捕获组,并调整了反向引用索引,以便它们与新朋友玩得很好。现在表达式在下一个括号组之前的位置匹配,感兴趣的子串保存为1。 所以这到底是怎么回事?很高兴你问我。一般的方法很简单:一次遍历一个字符,同时匹配下一个出现的“('和')”,在每种情况下捕获字符串的其余部分,以便确定在下一次迭代中恢复搜索的位置。让我把它一块一块地分解:
结论好了,给你。一种使用正向引用和标准(扩展)正则表达式特性匹配平衡嵌套结构的方法-无递归或平衡组。它效率不高,当然也不好看,但这是可能的。这是以前从未做过的。对我来说,这是非常令人兴奋的。 我知道你们很多人都使用正则表达式来完成并帮助其他用户完成更简单、更实用的任务,但如果有人和我一样对正则表达式突破可能性极限感到兴奋,那么我很想听听你们的意见。如果有兴趣,我有其他类似的材料张贴。 |
|
|
2
6
简明的输入校正首先,您的输入不正确,因为有一个额外的括号(如下所示)
进行适当的修改以包括或排除额外的括号,最终可能会出现以下字符串之一: 额外括号已删除
添加其他括号以匹配额外的右括号
正则表达式功能其次,这实际上只有在包含递归功能的正则表达式风格中才真正可能,因为任何其他方法都无法正确匹配开/闭括号(如OP的解决方案所示,它匹配上述错误输入的额外括号)。 这意味着,对于不含 目前 支持递归(Java、Python、JavaScript等),正则表达式中的递归(或尝试模仿递归)是 不 可能的 输入考虑到原始输入实际上无效,我们将使用以下输入进行测试。
根据这些输入进行测试应得出以下结果:
密码有多种方法可以匹配嵌套组。下面提供的解决方案都依赖于正则表达式风格,其中包括递归功能(例如PCRE)。 使用定义块
笔记
:此正则表达式使用标志
无定义块
笔记
无x修改器(一个衬里)
没有命名(组和引用)
笔记 :这是我能想到的最短的方法。 解释我将解释最后一个正则表达式,因为它是上面所有其他正则表达式的简化和最小示例。
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |