strings.lua

Send to Kindle
home » snippets » lua » strings.lua


a = "GET /hello"
b = "GET/hello"

i, j = string.find(a, " ")
print(i, j)

i, j = string.find(b, " ")
print(i, j)

local function get_method(request)
  idx_begin, idx_end = string.find(request, " ")
  if idx_begin == nil then
    return ""
  else
    return string.sub(request, 1, idx_begin - 1)
  end
end

print("[" .. get_method("get /abc") .. "]")
print("[" .. get_method("get/abc") .. "]")

local function get_url(request)
  -- Pass true for 4th param to indicate that pattern is not a regex.
  idx_begin = string.find(request, " ", 1, true)
  if idx_begin == nil then
    return ""
  end
  idx_begin = idx_begin + 1
  idx_end = string.find(request, " ", idx_begin, true)
  if idx_end == nil then
    idx_end = -1
  else
    idx_end = idx_end - 1
  end
  return string.sub(request, idx_begin, idx_end)
end

print("[" .. get_url("get /abc?y=3 asd") .. "]")
print("[" .. get_url("get/abc") .. "]")


local function get_servlet(request)
  url = get_url(request)
  if url == "" then
    return ""
  end
  idx_begin = string.find(request, "/", 2, true)
  if idx_begin == nil then
    return ""
  end
  idx_begin = idx_begin + 1
  idx_end = string.find(request, " ", idx_begin, true)
  if idx_end == nil then
    idx_end = -1
  else
    idx_end = idx_end - 1
  end
  return string.sub(request, idx_begin, idx_end)
end


local function get_servlet(url)
  servlet = nil
  part = nil
  -- does it look like http://www.google.com/servlet_1/servlet_2?param=x
  string.gsub(url, "^.*://[^/]*/(.*)", function(g) part = g; return "" end)
  -- does it look like /servlet_1/servlet_2?param=x
  if part == nil then
    string.gsub(url, "^/(.*)", function(g) part = g; return "" end)
  end
  if part == nil then
    return ""
  end
  string.gsub(part, "^([^&?]*)", function(g) servlet = g; return "" end)
  if servlet == nil then
    return ""
  else
    return servlet
  end
end

print(get_servlet("http://google.com/servlet/more?q=1"))
print(get_servlet("/servlet/more?q=1"))
print(get_servlet("/servlet/more?q=1"))