I'm trying to find a solution to a regex that can match anything after a string or nothing, but if there's something it can't be a dot .
is it possible to do without negative lookahead?
here's an example regex:
.*\.(cpl)[^.].*
now the string:
C:\Windows\SysWOW64\control.exe mlcfg32.cpl sounds
this one is matched, but if there's only:
C:\Windows\SysWOW64\control.exe mlcfg32.cpl
it's not matched because due to the dot blacklist it's searching for any character after cpl,if i use ? after the [^.] however it won't blacklist the . in case there's something else after, so it will capture this even if it shouldn't:
C:\Windows\SysWOW64\control.exe mlcfg32.cpl. sounds
can it be done without using negative lookaheads? - ?!
CodePudding user response:
You may use this regex:
.*\.cpl(?:[^.].*|$)
RegEx Breakdown:
.*: Match 0 or more of any character\.cpl: Match.cpl(?:[^.].*|$): Match end of string or a non-dot followed by any text
CodePudding user response:
You can use
.*\.(cpl)(?:[^.].*)?$
See the regex demo. Details:
.*- zero or more chars other than line break chars as many as possible\.- a dot(cpl)- Group 1:cpl(?:[^.].*)?- an optional non-capturing group that matches a char other than.char and then zero or more chars other than line break chars as many as possible$- end of string.
