Forum Moderators: phranque
$_ = 'https://www.example.com/whatever.html?utm_source=blah1';
$pattern = '(\?[^&]*)(&(amp;)?)?(utm_\w+|source)=[^&]*(&(amp;)?)?';
while (m#$pattern#gi) {
s#$pattern#$1$2#gi;
}
print; [edited by: phranque at 1:58 pm (utc) on Oct 11, 2019]
[edit reason] disable graphic smile faces [/edit]
[^&]*)(&(amp;)?)?(utm_\w+|source)
(using [ code ] markup to suppress unwanted smileyfaces) will match as far as it can, meaning everything up to and including “utm_” because it can still grab a “source” after that.
$pattern = '(\?|&(amp;)?)?(utm_\w+|source)=[^&]*(&(amp;)?)?';
while (m#$pattern#i) {
s#$pattern#$1#i;
} $pattern = '(\?[^&]*)(&(amp;)?)?utm_\w+=[^&]*(&(amp;)?)?';
while (m#$pattern#i) {
s#$pattern#$1$2#i;
}
s#(\?[^&]*)(&(amp;)?)?source=[^&]*(&(amp;)?)?#$1$2#i; [edited by: phranque at 1:59 pm (utc) on Oct 11, 2019]
[edit reason] disable graphic smile faces [/edit]
@arr = (
'https://www.example.com/whatever.html?utm_content=blah4',
'https://www.example.com/whatever.html?something=abc&utm_source=123&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4&foo=bar',
'https://www.example.com/whatever.html?utm_source=123&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4&foo=bar',
'https://www.example.com/whatever.html?utm_source=123&something=abc&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4&foo=bar',
'https://www.example.com/whatever.html?something=abc&utm_source=123&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4',
'https://www.example.com/whatever.html?utm_source=123&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4',
'https://www.example.com/whatever.html?utm_source=123&ocid=boo&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4'
);
$pattern = '(\?|&(amp;)?)(utm_\w+|(c|oc|trk|gcl|fbcl|mkw|pgr|pta)id|refer+er|share|mkt_tok|(sub|_)*source|usqp|ref_(src|url)|mtrref|gw[ht]|refcode[0-9]*)=[^&]*(&(amp;)?)?';
foreach (@arr) {
print $_ . "\n";
while (m#$pattern#i) {
s#$pattern#$1#i;
}
# just in case, remove repeating &
s#(&(amp;)?){2,}#&#;
# remove trailing ? or &
s#(\?|&(amp;)?)+$##;
print ' -> ' . $_ . "\n\n";
}
## Results
https://www.example.com/whatever.html?utm_content=blah4
-> https://www.example.com/whatever.html
https://www.example.com/whatever.html?something=abc&utm_source=123&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4&foo=bar
-> https://www.example.com/whatever.html?something=abc&foo=bar
https://www.example.com/whatever.html?utm_source=123&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4&foo=bar
-> https://www.example.com/whatever.html?foo=bar
https://www.example.com/whatever.html?utm_source=123&something=abc&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4&foo=bar
-> https://www.example.com/whatever.html?something=abc&foo=bar
https://www.example.com/whatever.html?something=abc&utm_source=123&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4
-> https://www.example.com/whatever.html?something=abc
https://www.example.com/whatever.html?utm_source=123&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4
-> https://www.example.com/whatever.html
https://www.example.com/whatever.html?utm_source=123&ocid=boo&utm_medium=blah2&utm_campaign=blah3&utm_content=blah4
-> https://www.example.com/whatever.html