Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby字符串中搜索、递增和替换整数子字符串?_Ruby_Regex_String_Replace_Gsub - Fatal编程技术网

如何在Ruby字符串中搜索、递增和替换整数子字符串?

如何在Ruby字符串中搜索、递增和替换整数子字符串?,ruby,regex,string,replace,gsub,Ruby,Regex,String,Replace,Gsub,我有很多这样的文档: foo_1 foo_2 foo_3 bar_1 foo_4 ... 我想通过获取foo\ux]的所有实例并用foo\ux+1]替换它们来转换它们。在本例中: foo_2 foo_3 foo_4 bar_1 foo_5 ... 我可以用gsub和block来做这个吗?如果不是,最干净的方法是什么?我真的在寻找一个优雅的解决方案,因为我总是可以对它进行暴力破解,但我觉得有一些正则表达式的技巧值得学习。我对Ruby一无所知,但类似的东西应该可以: "foo_1 foo

我有很多这样的文档:

foo_1 foo_2

foo_3

bar_1 foo_4 ...
我想通过获取
foo\ux]
的所有实例并用
foo\ux+1]
替换它们来转换它们。在本例中:

foo_2 foo_3

foo_4

bar_1 foo_5 ...
我可以用gsub和block来做这个吗?如果不是,最干净的方法是什么?我真的在寻找一个优雅的解决方案,因为我总是可以对它进行暴力破解,但我觉得有一些正则表达式的技巧值得学习。

我对Ruby一无所知,但类似的东西应该可以:

"foo_1 foo_2".gsub(/(foo_)(\d+)/) {|not_needed| $1 + ($2.to_i + 1).to_s}


乐:我真的成功了:

如果你只是想改变foo_uu后面的数字

str.gsub(/(?<=foo_)\d+/) {|num| num.to_i+1}

str.gsub(/(?=1.9.

更简单的方法是使用。下一步

"foo_1".next #=> foo_2
"bar_1 foo_1".next #=> bar_1 foo_2
所以,你可以简化你的正则表达式和块

"bar_1 foo_2".gsub(/\bfoo_\d+\b/) {|f| f.next }

谢谢!我没有考虑匹配(脚)并在块中重用它。你可以完全省略
| not|needed |
。@Wayne哦,好吧。但我会这样保留它,以表明它可用但未使用。实际上,如果你的Ruby版本>=1.9,lookbehinds可以工作。1.9添加了一些有趣的新功能和一个很棒的名为Oniguruma的正则表达式引擎(PHP5 mb regex也使用)@Phrogz。不幸的是,大多数人仍然在使用Ruby 1.8,它可以处理前瞻,但不能处理后视断言…我删除了我的评论,因为我显然没有足够的关于Ruby的信息来做出明智的评论。知道regular-expressions.info是一个可靠的源,我错误地认为它是最新的。也许你应该添加一个请在答案中添加注释,以指定代码的工作版本。@Phrogz请注意,我正在处理的项目使用的是ruby-1.8.7(不是我的选择)。这是一个企业部署,大约有25名开发人员参与开发和维护的各个方面。虽然我相信团队中的所有开发人员都会喜欢ruby-1.9,但短期内没有升级计划。