1
9
解决方案下面的代码段生成执行该作业的模式( see it run on ideone.com ):
注意,这个解决方案使用的技术已经在我的regex系列文章中介绍过。这里唯一的新鲜事就是
工具书类这是对使用的基本regex构造的简要描述:
相关问题解释模式匹配零宽度断言。使用相当复杂的算法来断言当前位置是 triangular number . 主要有两种选择:
因此,第一个备选方案是简单的“基本情况”,第二个备选方案设置如何在之后进行所有后续匹配。Java没有自定义命名组,但这里是3个捕获组的语义:
你可以用数学归纳法来严格证明这个算法的正确性。
为了帮助说明这是如何工作的,让我们通过一个例子来说明。让我们来
记住
因此在我们的例子中,给出了
拥有
注意
结论
不用说,这个特定的解决方案的性能很差。regex引擎只记住
在哪里?
最后一场比赛是
可能有很多比这个更好的regex解决方案。尽管如此,这个特定的解决方案的复杂性和低效性应该合理地表明regex不是为这种模式匹配而设计的。 也就是说,为了学习的目的,这是一个绝对美妙的问题,因为在研究和制定解决方案时有大量的知识。希望这个特别的解决方案及其解释具有指导意义。 |
2
5
regex的目的是识别模式。在这里,您不搜索模式,而是搜索长度分割。 所以regex不合适 . 这是可能的,但不是用一个正则表达式:找到第一个 n 使用regex的字符,可以使用:“^(.”{ n } * 所以,您可以使用该regex搜索第一个字符。 然后,创建一个子字符串,并搜索接下来的2个字符。 等。 就像@splash所说的,这会使代码变得更复杂、更不正式,因为您使用regex是为了超出它们的目的。 |
3
0
|
lonix · 使用sed从JSON中提取非贪婪正则表达式 1 年前 |
Dima Malko · 如何在指定符号前添加符号? 2 年前 |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
Katia · 根据特定规则进行多行匹配 2 年前 |
MHA · Pandas str.extract()以字母结尾的数字 2 年前 |
Slava Vir · 如何查找后面“/”之间的最后一组 2 年前 |