The .*?
will still match aa
in between aa
and kk
.
Use a tempered greedy token:
aa((?:(?!aa).)*?)kk
^^^^^^^^^^^^^
or
aa((?:(?!aa|kk).)*)kk
^^^^^^^^^^^^^^^
See the regex demo
Details:
aa
- an aa
substring
((?:(?!aa).)*?)
- Group 1 capturing any zero or more chars (if RegexOptions.Singleline
option used, even including newline) that are not starting an aa
substring sequence, as few as possible
kk
- a kk
substring

C# code:
var re = @"aa((?:(?!aa).)*?)kk";
var str = "aa aa value kk 8718764 aa value1 kk kk kk 5178gkjh aathtkhkk";
var res = Regex.Matches(str, re)
.Cast<Match>()
.Select(p => p.Groups[1].Value)
.ToList();