Skip to content

Instantly share code, notes, and snippets.

@robertmryan
Last active February 29, 2024 16:16
Show Gist options
  • Save robertmryan/7fc421b905d22be5063528e64676529a to your computer and use it in GitHub Desktop.
Save robertmryan/7fc421b905d22be5063528e64676529a to your computer and use it in GitHub Desktop.
Swift 4 string extension to find all ranges of some substring
extension StringProtocol where Index == String.Index {
func ranges<T: StringProtocol>(of substring: T, options: String.CompareOptions = [], locale: Locale? = nil) -> [Range<Index>] {
var ranges: [Range<Index>] = []
while let result = range(of: substring, options: options, range: (ranges.last?.upperBound ?? startIndex)..<endIndex, locale: locale) {
ranges.append(result)
}
return ranges
}
}
@robertmryan
Copy link
Author

robertmryan commented Feb 28, 2024

Or also,

let string = "Administrator or worker in office"

let pattern = Regex {
    Anchor.wordBoundary
    "or"
    Anchor.wordBoundary
}.ignoresCase()

for match in string.matches(of: pattern) {
    print(string[match.range])
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment