识别提取物&用ruby替换部分字符串

时间:2016-11-02 01:06:56

标签: ruby regex

我一直在努力想弄清楚如何解决这个问题。我有两种URL,我需要能够更新/增加页面的数值。

网址1:

forum-351-page-2.html

在上面,我想修改这个网页的n页。因此,我想生成具有给定范围的第1页到第30页的新网址。但这就是我想改变的一切。 page-n.html

网址2:

href="forumdisplay.php?fid=115&page=3

第二个网址不同但我觉得它更容易访问。

2 个答案:

答案 0 :(得分:1)

第一个网址

url1 = "forum-351-page-2.html"

(1..30).each do |x|
  puts url1.sub(/page-\d*/, "page-#{x}")
end

这将输出

"forum-351-page-1.html"
"forum-351-page-2.html"
"forum-351-page-3.html"
...
"forum-351-page-28.html"
"forum-351-page-29.html"
"forum-351-page-30.html"

你可以为第二个网址做同样的事情。

url1.sub(/page=\d*$/, "page=#{x}")

答案 1 :(得分:1)

R = /
    (?:             # begin non-capture group
      (?<=-page-)   # match string in a positive lookbehind
      \d+           # match 1 or more digits
      (?=\.html)    # match period followed by 'html' in a positive lookahead
    )               # close non-capture group
    |               # or
    (?:             # begin non-capture group
      (?<=&page=)   # match string in a positive lookbehind
      \d+           # match 1 or more digits
      \z            # match end of string
    )               # close non-capture group
    /x              # free-spacing regex definition mode

def update(str, val)
  str.sub(R, val.to_s)
end

update("forum-351-page-2.html", 4)
  #=> "forum-351-page-4.html"
update("forumdisplay.php?fid=115&page=3", "4")
  #=> "forumdisplay.php?fid=115&page=4"