Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need to remove specific parameter from url

Tags:

regex

gsub

lua

I am new to the Lua library, I have one use case which I have to remove on a specific parameter and its value: for example:

String 1 : ?xyz=true&toekn=4234dadsasda

String 2 : ?toekn=4234dadsasda&test=pass

Need output like this after removing token and its value

String 1 : ?xyz=true

String 2 : ?test=pass

I have tried the below Lua gsub function but no luck:

string.gsub(args, "token=.*", " ")

any help apricated, thanks

like image 552
pankaj desai Avatar asked Apr 08 '26 04:04

pankaj desai


2 Answers

You may want to considers additional conditions (using & and ; as separators[1]) and corner cases (trailing separators and substrings with token):

text:gsub("([&;]?)%f[%a]token=[^&;]+([&;]?)",
  function(s1, s2) return s1 and s2 and #(s1..s2) > 1 and s1 or "" end)

This solution works correctly on query strings that include parameters like subtoken and that use ; as separators. The template is using %f[%a], which is a frontier pattern that describes a zero-length boundary where non-letter changes to a letter (this includes the first character in a string).

[1] W3C recommends that all web servers support semicolon separators in addition to ampersand separators to allow application/x-www-form-urlencoded query strings in URLs within HTML documents without having to entity escape ampersands (wikipedia article on query string).

like image 115
Paul Kulchenko Avatar answered Apr 10 '26 02:04

Paul Kulchenko


If you can only have two query params and no more than two as shown in your input you can use

text:gsub("&?token=[^&]+&?", "")

Or, if you have multiple query params, you can use

text:gsub("([&?])token=[^&]+&?", "%1"):gsub("(.*)&$", "%1")

See the online Lua demo #1 and the online Lua demo #2.

Details:

  • &? - an optional &
  • token= - a literal string
  • [^&]+ - one or more chars other than &
  • &? - an optional & char.

In the second solution, :gsub("([&?])token=[^&]+&?", "%1") replaces the match with either ? or & before the token, and the next gsub("(.*)&$", "%1") removes the & at the end of string in case the param occurs at the end of string.

like image 45
Wiktor Stribiżew Avatar answered Apr 10 '26 01:04

Wiktor Stribiżew



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!