2017-01-12 3 views
1

私はURLパーサを作成していますが、URLの最後から数字部分を抽出し、抽出された数字を10ずつインクリメントして更新したい3種類のURLを持っていますURL。私は抽出する正規表現を使用しようとしているが、私はregexと問題を抱えている新しいです。さまざまなURLの末尾部分を抽出する正規表現

  1. インクリメント10による最後の番号20:

    http://forums.scamadviser.com/site-feedback-issues-feature-requests/20/ 
    
  2. インクリメント最後の数50によって

    これらは私が最後の番号部分をインクリメントしたいそのうち3 URLの構造であり、 10:

    https://forums.questionablecontent.net/index.php/board,1.50.html 
    
  3. 最後の30を10刻みでインクリメントします。

    https://forums.comodo.com/how-can-i-help-comodo-please-we-need-you-b39.30/ 
    
+0

なぜ別のホイールを作成しますか? RubyのURIと[Addressable :: URI](https://github.com/sporkmonger/addressable)の間には、よくテストされたコードがたくさんあります。 –

+0

あなたが試したこととは何の関係もないあなたのためのコードを書くのではなく、これを解決するためのあなたの試みを見てみたいと思います。 –

答えて

2

正規表現\d+(?!.*\d)を使用すると、文字列の最後の桁のチャンクを取得します。ブロックを使用してs.gsubを使用して番号を変更し、結果に戻します。

this Ruby demoを参照してください:

strs = ['http://forums.scamadviser.com/site-feedback-issues-feature-requests/20/', 'https://forums.questionablecontent.net/index.php/board,1.50.html', 'https://forums.comodo.com/how-can-i-help-comodo-please-we-need-you-b39.30/'] 
arr = strs.map {|item| item.gsub(/\d+(?!.*\d)/) {$~[0].to_i+10}} 

注:$~はMatchDataオブジェクトで、[0]インデックスを使用して、我々はマッチ全体の値にアクセスすることができます。

結果:

http://forums.scamadviser.com/site-feedback-issues-feature-requests/30/ 
https://forums.questionablecontent.net/index.php/board,1.60.html 
https://forums.comodo.com/how-can-i-help-comodo-please-we-need-you-b39.40/ 
+0

小さな更新:もし文字列が改行を持つことができるなら、 '/ \ d +(?!。* \ d)/ m'を使ってください(ただし、ここではそうは思わないでしょう)。 –

+0

このマップを使用するのではなく、一度に1つのURLだけを実行したければ、どうすればよいでしょうか? –

+0

これは既に上記のコードにあります: 'item = item.gsub(/ \ d +(?!* * d)/){$〜[0] .to_i + 10}' –

0

この正規表現は、先読み(パターン「を見て」は任意の文字を食べていません)を使用することにより、各URLにのみ、最後の全体数に一致します。

\d+(?=\D*$) 

online demoここにあります。このよう

+0

が合意、編集されました。 – sweaver2112

0

urls = ['http://forums.scamadviser.com/site-feedback-issues-feature-requests/20/', 'https://forums.questionablecontent.net/index.php/board,1.50.html', 'https://forums.comodo.com/how-can-i-help-comodo-please-we-need-you-b39.30/'] 
pattern = /(\d+)(?=[^\d]+$)/ 

urls.each do |url| 
    url.gsub!(pattern) {|m| m.to_i + 10} 
end 

puts urls 

また、ここでそれをオンラインでテストすることができます。https://ideone.com/smBJCQ

関連する問題