Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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_String - Fatal编程技术网

Ruby读取字符串模式并编辑它们

Ruby读取字符串模式并编辑它们,ruby,string,Ruby,String,我有一条消息,这条消息的回复在主题中 模式如下: RE[22] Some subject 当对方回复时,应该是: RE[23] Some subject 所以基本上我需要得到[和]RE[**]之间的值,并对其进行更改。。但我不能只看长度,因为它可能会改变,例如,它可能是RE[254] 我试图用regex或scan找到解决方案,但我无法以任何方式实现这一点。。 我真的不明白如何在ruby中做到这一点。试试这个: "RE[22] Some subject".sub(/^RE\[(\d+)\](.

我有一条消息,这条消息的回复在主题中

模式如下:

RE[22] Some subject
当对方回复时,应该是:

RE[23] Some subject
所以基本上我需要得到[和]RE[**]之间的值,并对其进行更改。。但我不能只看长度,因为它可能会改变,例如,它可能是RE[254]

我试图用regex或scan找到解决方案,但我无法以任何方式实现这一点。。 我真的不明白如何在ruby中做到这一点。

试试这个:

"RE[22] Some subject".sub(/^RE\[(\d+)\](.*)/) do
  value = $1.to_i
  "RE[#{value + 1}]#{$2}"
end

正则表达式非常强大。你真的应该把它们学好

如果这些是您期望的唯一数字,那么使用/\d+/匹配它们就足够了


如果您想确保这些是括号内的数字,您可以使用/?好的,我知道它是如何工作的,多亏了Christoph Petschnig和davidrac

最后,我做的是:

@string = "RE[22] Kaut kads random teksts..."
@get_re = nil

 @string.sub(/\d+/) do |x|
   @get_re = x.to_i + 1
end
辛达做到了这一点,因为我的回复号码总是第一位的,但是如果它的第一条消息和它没有RE[]前缀,那该怎么办呢,所以我需要考虑一下这个问题

我对davidrac示例进行了一些修改,得到了解决方案。因此,现在@string是否具有RE[]前缀无关紧要:

@string = "RE[25] some random subject with more numbers 245 in it"
或否:

@string = "some random subject with more numbers 245 in it"
此代码将对其进行编辑或添加:

@get_re = nil

@string.sub(/(?<=RE\[)\d+(?=\])/) do |x|
    @get_re = @string["RE[#{x.to_i + 1}]"]
end

return @get_re? @get_re : "RE[1] " + @string

这对我来说毫无意义。。这个dos到底是做什么的=>\d+\i这个dos=>/^RE[\d+].*/adn这个dos是什么dos$1来自它很难解释一个stackoverflow注释中最多600个字符的正则表达式。谷歌搜索正则表达式教程,并花费至少几个小时编写一个好的教程。在您的编程生涯中,您将非常感谢它。您可能会使用Stringnext:999.next=>1000而不是计算值