我有一条消息,它计算主题中的消息回复..
模式是这样的:
RE[22] Some subject
当人们回复它时,它应该是:
RE[23] Some subject
所以基本上我需要得到“[”和“]”( RE[**] )之间的值并改变它..但我不能只按长度,因为它可能会改变,例如,它可能是“重新 [254]"..
我试图用正则表达式找到解决方案,scan
但是我无法以任何方式让它工作。我真的不明白如何在 ruby 中做到这一点。
试试这个:
"RE[22] Some subject".sub(/^RE\[(\d+)\](.*)/) do
value = $1.to_i
"RE[#{value + 1}]#{$2}"
end
正则表达式非常强大。你真的应该好好学习它们!
/\d+/
如果这些是您期望的唯一数字,那么使用它们来匹配它们就足够了。
如果您想确保这些是括号内的数字,您可以使用 /(?<=\[)\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
用 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