1

私は URL パーサーを作成しており、URL の末尾から数字部分を抽出し、抽出した数字を 10 ずつ増やして URL を更新したい 3 種類の URL があります。正規表現を使用して抽出しようとしていますが、正規表現が初めてで問題があります。

これらは、最後の数字部分をインクリメントしたい 3 つの 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.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/
于 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

このような:

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 に答える
0

この正規表現は、先読みを使用して各 URLの最後の整数のみに一致します (これはパターンを「認識」しますが、文字を消費しません)。

\d+(?=\D*$)

オンラインデモはこちら。

于 2017-01-12T15:00:33.453 に答える