正则表达式提取变化 URL 的最后数字部分
Regex to extract last number portion of varying URL
我正在创建一个 URL 解析器并具有三种 URLs,我想从中提取 URL 末尾的数字部分并递增提取数字 10 并更新 URL。我正在尝试使用正则表达式进行提取,但我是正则表达式的新手,遇到了麻烦。
这是三个 URL 结构,我想增加其中的最后数字部分:
将最后一个数字 20 增加 10:
http://forums.scamadviser.com/site-feedback-issues-feature-requests/20/
将最后一个数字 50 增加 10:
https://forums.questionablecontent.net/index.php/board,1.50.html
将最后一个数字 30 增加 10:
https://forums.comodo.com/how-can-i-help-comodo-please-we-need-you-b39.30/
试试这个正则表达式:
\d+(?=(\/)|(.html))
它将提取最后一个数字。
演示:https://regex101.com/r/zqUQlF/1
用这个正则表达式替换回来:
(.*?)(\d+)((\/)|(.html))
使用 \d+(?!.*\d)
正则表达式,您将获得字符串中的最后一个数字块。然后,用s.gsub
加块修改数字放回结果
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/
此正则表达式通过使用先行('sees' 模式但不吃任何字符)仅匹配每个 URL 中的最后一个整数 :
\d+(?=\D*$)
online demo 这里
像这样:
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
我正在创建一个 URL 解析器并具有三种 URLs,我想从中提取 URL 末尾的数字部分并递增提取数字 10 并更新 URL。我正在尝试使用正则表达式进行提取,但我是正则表达式的新手,遇到了麻烦。
这是三个 URL 结构,我想增加其中的最后数字部分:
将最后一个数字 20 增加 10:
http://forums.scamadviser.com/site-feedback-issues-feature-requests/20/
将最后一个数字 50 增加 10:
https://forums.questionablecontent.net/index.php/board,1.50.html
将最后一个数字 30 增加 10:
https://forums.comodo.com/how-can-i-help-comodo-please-we-need-you-b39.30/
试试这个正则表达式:
\d+(?=(\/)|(.html))
它将提取最后一个数字。
演示:https://regex101.com/r/zqUQlF/1
用这个正则表达式替换回来:
(.*?)(\d+)((\/)|(.html))
使用 \d+(?!.*\d)
正则表达式,您将获得字符串中的最后一个数字块。然后,用s.gsub
加块修改数字放回结果
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/
此正则表达式通过使用先行('sees' 模式但不吃任何字符)仅匹配每个 URL 中的最后一个整数 :
\d+(?=\D*$)
online demo 这里
像这样:
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