One option would be to use a regular expression. You can provide a third argument to match() instructing the search to start from a particular position in the string, which you can use to find sequential matches like so:
julia> pattern = r"aaa" # the r"" prefix makes this a regular expression
r"aaa"
julia> target = "aaabbbaaabbbaaabbb"
"aaabbbaaabbbaaabbb"
julia> m = match(pattern, target)
RegexMatch("aaa")
julia> m.offset
1
julia> m = match(pattern, target, m.offset + 1)
RegexMatch("aaa")
julia> m.offset
7
julia> m = match(pattern, target, m.offset + 1)
RegexMatch("aaa")
julia> m.offset
13
In theory findall("aaa", "aaabbbaaabbbaaabbb") should probably do what you request. That would be consistent with findfirst and friends. Feel free to file a feature request.
I think it used to, or there was some similar function that did. There was a major refactor of search and find* functions before the release of 1.0, you’ll probably find something about this in that issue or related PRs.