30

How to match a URL like:

http://www.example.com/foo/:id/bar
http://www.example.com/foo/1/bar
http://www.example.com/foo/999/bar

stub_request(:post, "www.example.com")

B Seven
  • 44,484
  • 66
  • 240
  • 385

3 Answers3

39

You can use %r{} instead of // for your regular expression in Ruby to avoid having to escape the forward slashes in URLs. For example:

stub_request(:post, %r{\Ahttp://www.example.com/foo/\d+/bar\z})
Gerry Shaw
  • 9,178
  • 5
  • 41
  • 45
  • Also, can use many other characters instead of `{}` to close the regex, for example `%r()` or `%r''` This is helpful because the regex quantity modifier uses curly braces. So if you're trying to match a URL or something with a specific number of characters, like a 36 character API key, use something like parentheses to close the regex. – johnpitchko Jun 12 '21 at 16:40
21

The second argument to stub_request must be a regular expression, not a string.

stub_request(:post, /http:\/\/www.example.com\/foo\/\d+\/bar/)
Philippe Rathé
  • 8,888
  • 3
  • 22
  • 13
12

http://www\..*?\.com/foo/\d+/bar should work for you.

Jack
  • 5,680
  • 10
  • 49
  • 74
  • 5
    @BSeven `\.` is escaping the `.` dot character while `.*?` means any character (the dot character means any character) zero or more times (the `*` is zero or more times while `+` is 1 or more times) and make it non-greedy (the question mark `?`) so it stops looking as soon as it hits `.com`. – Jack Dec 11 '12 at 00:02