-3

件名にメッセージの返信をカウントするメッセージがあります..

パターンは次のようになります。

RE[22] Some subject

人がそれに返信するときは、次のようにする必要があります。

RE[23] Some subject

したがって、基本的には "[" と "]" ( RE[**] ) の間の値を取得して変更する必要があります。 RE[254]」..

正規表現を使用して解決策を見つけようとしましscanたが、これをうまく機能させることができません..ルビーでこれを行う方法がよくわかりません。

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

わかりました。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 に答える
0

予想される数字がこれらだけの場合は、/\d+/それらを照合するために使用するだけで十分です。

これらが括弧内の数字であることを確認したい場合は、使用できます /(?<=\[)\d+(?=\])/

于 2012-08-13T11:09:33.977 に答える