-3

我有一条消息,它计算主题中的消息回复..

模式是这样的:

RE[22] Some subject

当人们回复它时,它应该是:

RE[23] Some subject

所以基本上我需要得到“[”和“]”( RE[**] )之间的值并改变它..但我不能只按长度,因为它可能会改变,例如,它可能是“重新 [254]"..

我试图用正则表达式找到解决方案,scan但是我无法以任何方式让它工作。我真的不明白如何在 ruby​​ 中做到这一点。

4

3 回答 3

4

试试这个:

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

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

于 2012-08-13T11:01:24.887 回答
0

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

如果您想确保这些是括号内的数字,您可以使用 /(?<=\[)\d+(?=\])/

于 2012-08-13T11:09:33.977 回答
0

好的,我是如何工作的,感谢 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

用 cinda 成功了,因为我的回复号码总是第一个,但是如果它的第一条消息没有 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
于 2012-08-13T12:33:04.297 回答