Regex для извлечения последней части числа изменяющегося URL
Я создаю анализатор URL-адресов и имею три вида URL-адресов, из которых я хотел бы извлечь числовую часть из конца 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/
4 ответа
С \d+(?!.*\d)
регулярное выражение, вы получите последний кусок цифры в строке. Затем используйте s.gsub
с блоком для изменения числа и возврата к результату.
Смотрите это 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/
Попробуйте это регулярное выражение:
\d+(?=(\/)|(.html))
Будет извлечен последний номер.
Демо: https://regex101.com/r/zqUQlF/1
Замените обратно этим регулярным выражением:
(.*?)(\d+)((\/)|(.html))
Как это:
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-адресе с помощью заглядывания (которое "видит" шаблоны, но не использует никаких символов):
\d+(?=\D*$)
онлайн демо здесь.