rubyregexrubular

Regex to extract last number portion of varying URL


I'm creating a URL parser and have three kind of URLs from which I would like to extract the number portion from the end of the URL and increment the extracted number by 10 and update the URL. I'm trying to use regex to extract but I'm new to regex and having trouble.

These are three URL structures of which I'd like to increment the last number portion of:

  1. Increment last number 20 by 10:

    http://forums.scamadviser.com/site-feedback-issues-feature-requests/20/
    
  2. Increment last number 50 by 10:

    https://forums.questionablecontent.net/index.php/board,1.50.html
    
  3. Increment last number 30 by 10:

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

Solution

  • With \d+(?!.*\d) regex, you will get the last digit chunk in the string. Then, use s.gsub with a block to modify the number and put back to the result.

    See 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}}
    

    Note: $~ is a MatchData object, and using the [0] index we can access the whole match value.

    Results:

    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/