I have a regex which is matching urls which don't have quotes (double or single) at the end and have & (ampersand) in the url.
The regex i made
([^'` "\n] )\.([^ \n] )&([^ "`'\n] )(?!["'])
but it's just not taking the last word and matching the url
Take the example of picture above
google.com/cool?cool1=yes&cool2=no&cool3=no"
the url should not match as it have " in the end
but it's just not matching 'o' and matching the remaining url.
All I wanted to do is if this double quote is present in the end then just don't match the whole url.
CodePudding user response:
You need to make the lookahead active on the whole part after the ampersand. We then have the option of
$
end of the line
or(?=\s)
positive lookahead for a space.
([^' "\n] )\.([^ \n] )&((?!["'])[^ "'\n]) ($|(?=\s)
See https://regex101.com/r/6ZGpSX/1
CodePudding user response:
For a match only, you can omit the capture groups, and use a negated character class and you should omit the backtick `
from the negated character class if you want to allow to match it.
[^'"\s.] \.[^\s'"&] &[^\s"'] (?!\S)
Explanation
[^'"\s.]
Match 1 non whitespace chars other than"
'
.
\.
Match a dot[^\s'"&]
Match 1 non whitespace chars other than"
'
&
&
Match literally[^\s"']
Match 1 non whitespace chars other than"
'
(?!\S)
Assert a whitespace boundary to the right
See a regex demo.