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 whitespa
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
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."as.asd.sd ffindMyLastOccurrencedsfs. dfindMyLastOccurrencefsd d.sdfsd. sdfsdf sd ..COM"
.*(?=((?<=\S)\s+)).*
replaced by `>\1<`
> <
"as.asd.sd ffindMyLastOccurrencedsfs. dfindMyLastOccurrencefsd d.sdfsd. sdfsdf sd ..COM"
.*(?=(findMyLastOccurrence|(?<=\S)\s+|(?<=[^\.])\.+)).*
replaced by `>\1<`
>..<
Part 1 .*
edit to add:
.*?
Part 2 (?=(findMyLastOccurrence|(?<=\S)\s+|(?<=[^\.])\.+|(?<=**Not**NeedlePart)NeedlePart+))
(?=(needles))
findMyLastOccurrence|(?<=\S)\s+|(?<=[^\.])\.+)|(?<=**Not**NeedlePart)NeedlePart+
Part 3 .*
You can try this. It will capture the last white space segment - in the first capture group.
(\s+)\.[^\.]*$