ruby - 匹配与上一组匹配的相同数量的字符

标签 ruby regex

基本上,我需要 \k 的组合和 \g .

这是一个例子:

我有 "123045 ; 67089" 形式的字符串.仅当两个数字中相对于数字末尾的相同位置上有重复数字时,我才必须匹配它。在这种情况下,0123045距离数字末尾两个位置,0 也是如此。在 67089 .


问题是,如果我使用反向引用,数字的全部剩余部分必须匹配(又名 4589 ):

^\d*(\d)(\d*) ; \d*\1\2$

如果我使用模式重新执行,我必须给出具体的剩余字符数(在本例中为两个):

^\d*(\d)(\d{2}) ; \d*\1\g<2>$

是的,它必须在一个正则表达式中。

最佳答案

你在这里面临的是一个平衡问题。可以用递归来解决,我的做法是:

^\d*(\d)(?:(\d(?:(\s*;\s*\d*\1)|\g<2>)\d)|\g<3>)$

这会将\s*;\s*\d*\1作为两组平衡数之间的内容。为了摆脱递归,此内容必须恰好匹配一次(以避免像 12212;1;13 这样的匹配)。递归到此内容作为交替是针对双位数是每个数字的最后一位的情况。

你可以找到一些测试用例here

关于ruby - 匹配与上一组匹配的相同数量的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39854400/

相关文章:

ruby-on-rails - rails 4 - 使用 Paperclip 和 Dropbox 在 Heroku 中不显示图像。

ruby-on-rails - Rails 4 不存储数据、种子或默认模型保存

ruby - RDoc 部分 : 的 YARD 等效项

c# - 如何计算目录中文件的匹配数

javascript - 如何在不捕获它的情况下在捕获组 "absorb"之前/之后制作空白?

ruby-on-rails - 当实际情况与预期相同时,为什么这个简单的 Rails 单元测试会失败?

ruby - Ruby 中的预填充提示

python - 删除 scrapy python 中的特殊字符

python - 重新编译正则表达式帮助(python、beautifulsoup)

regex - 为什么 Scala 的组合器在解析大文件时解析速度很慢?我能做什么?