1

我正在创建一个 URL 解析器并拥有三种 URL,我想从中提取 URL 末尾的数字部分并将提取的数字增加 10 并更新 URL。我正在尝试使用正则表达式进行提取,但我是正则表达式的新手并且遇到了麻烦。

这是三个 URL 结构,我想增加其中的最后一个数字部分:

  1. 将最后一个数字 20 增加 10:

    http://forums.scamadviser.com/site-feedback-issues-feature-requests/20/
    
  2. 将最后一个数字 50 增加 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/
    
4

4 回答 4

2

使用\d+(?!.*\d)正则表达式,您将获得字符串中的最后一个数字块。然后,使用s.gsubwith 块来修改数字并放回结果。

请参阅此 Ruby 演示

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/
于 2017-01-12T14:56:13.130 回答
1

试试这个正则表达式:

\d+(?=(\/)|(.html))

它将提取最后一个数字。

演示:https ://regex101.com/r/zqUQlF/1


用这个正则表达式替换:

(.*?)(\d+)((\/)|(.html))

演示:https ://regex101.com/r/zqUQlF/2

于 2017-01-12T14:43:59.687 回答
0

此正则表达式通过使用前瞻(“看到”模式但不吃任何字符)仅匹配每个 URL 中的最后一个整数:

\d+(?=\D*$)

在线演示在这里。

于 2017-01-12T15:00:33.453 回答
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

于 2017-01-12T15:54:56.713 回答