My string being of the form:
"as.asd.sd fdsfs. dfsd d.sdfsd. sdfsdf sd .COM"
I only want to match against the last segment of whitespace before the last period(.)
So far I am able to capture whitespace but not the very last occurrence using:
\s+(?=\.\w)
How can I make it less greedy?
In a general case, you can match the last occurrence of any pattern using the following scheme:
pattern(?![\s\S]*pattern)
(?s)pattern(?!.*pattern)
pattern(?!(?s:.*)pattern)
where [\s\S]*
matches any zero or more chars as many as possible. (?s)
and (?s:.)
can be used with regex engines that support these constructs so as to use .
to match any chars.
In this case, rather than \s+(?![\s\S]*\s)
, you may use
\s+(?!\S*\s)
See the regex demo. Note the \s
and \S
are inverse classes, thus, it makes no sense using [\s\S]*
here, \S*
is enough.
Details:
\s+
- one or more whitespace chars(?!\S*\s)
- that are not immediately followed with any 0 or more non-whitespace chars and then a whitespace.You can try like so:
(\s+)(?=\.[^.]+$)
(?=\.[^.]+$)
Positive look ahead for a dot and characters except dot at the end of line.
Demo:
https://regex101.com/r/k9VwC6/3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With