Searching Strings - MIT/GNU Scheme 7.7.90+
Description: MIT/GNU Scheme 7.7.90+

Next: Matching Strings, Previous: Cutting and Pasting Strings, Up: Strings

### 6.6 Searching Strings

The first few procedures in this section perform string search, in which a given string (the text) is searched to see if it contains another given string (the pattern) as a proper substring. At present these procedures are implemented using a hybrid strategy. For short patterns of less than 4 characters, the naive string-search algorithm is used. For longer patterns, the Boyer-Moore string-search algorithm is used.

— procedure: string-search-forward pattern string
— procedure: substring-search-forward pattern string start end

> Pattern must be a string. Searches string for the leftmost occurrence of the substring pattern. If successful, the index of the first character of the matched substring is returned; otherwise, `#f` is returned.

> `substring-search-forward` limits its search to the specified substring of string; `string-search-forward` searches all of string.

>               (string-search-forward "rat" "pirate")
>                   => 2
>               (string-search-forward "rat" "pirate rating")
>                   => 2
>               (substring-search-forward "rat" "pirate rating" 4 13)
>                   => 7
>               (substring-search-forward "rat" "pirate rating" 9 13)
>                   => #f

— procedure: string-search-backward pattern string
— procedure: substring-search-backward pattern string start end

> Pattern must be a string. Searches string for the rightmost occurrence of the substring pattern. If successful, the index to the right of the last character of the matched substring is returned; otherwise, `#f` is returned.

> `substring-search-backward` limits its search to the specified substring of string; `string-search-backward` searches all of string.

>               (string-search-backward "rat" "pirate")
>                   => 5
>               (string-search-backward "rat" "pirate rating")
>                   => 10
>               (substring-search-backward "rat" "pirate rating" 1 8)
>                   => 5
>               (substring-search-backward "rat" "pirate rating" 9 13)
>                   => #f

— procedure: string-search-all pattern string
— procedure: substring-search-all pattern string start end

> Pattern must be a string. Searches string to find all occurrences of the substring pattern. Returns a list of the occurrences; each element of the list is an index pointing to the first character of an occurrence.

> `substring-search-all` limits its search to the specified substring of string; `string-search-all` searches all of string.

>               (string-search-all "rat" "pirate")
>                   => (2)
>               (string-search-all "rat" "pirate rating")
>                   => (2 7)
>               (substring-search-all "rat" "pirate rating" 4 13)
>                   => (7)
>               (substring-search-all "rat" "pirate rating" 9 13)
>                   => ()

— procedure: substring? pattern string

> Pattern must be a string. Searches string to see if it contains the substring pattern. Returns `#t` if pattern is a substring of string, otherwise returns `#f`.

>               (substring? "rat" "pirate")             =>  #t
>               (substring? "rat" "outrage")            =>  #f
>               (substring? "" any-string)              =>  #t
>               (if (substring? "moon" text)
>                   (process-lunar text)
>                   'no-moon)

— procedure: string-find-next-char string char
— procedure: substring-find-next-char string start end char
— procedure: string-find-next-char-ci string char
— procedure: substring-find-next-char-ci string start end char

> Returns the index of the first occurrence of char in the string (substring); returns `#f` if char does not appear in the string. For the substring procedures, the index returned is relative to the entire string, not just the substring. The `-ci` procedures don't distinguish uppercase and lowercase letters.

>               (string-find-next-char "Adam" #\A)              =>  0
>               (substring-find-next-char "Adam" 1 4 #\A)       =>  #f
>               (substring-find-next-char-ci "Adam" 1 4 #\A)    =>  2

— procedure: string-find-next-char-in-set string char-set
— procedure: substring-find-next-char-in-set string start end char-set

> Returns the index of the first character in the string (or substring) that is also in char-set, or returns `#f` if none of the characters in char-set occur in string. For the substring procedure, only the substring is searched, but the index returned is relative to the entire string, not just the substring.

>               (string-find-next-char-in-set my-string char-set:alphabetic)
>                   =>  start position of the first word in my-string
>               ; Can be used as a predicate:
>               (if (string-find-next-char-in-set my-string
>                                                 (char-set #\( #\) ))
>                   'contains-parentheses
>                   'no-parentheses)

— procedure: string-find-previous-char string char
— procedure: substring-find-previous-char string start end char
— procedure: string-find-previous-char-ci string char
— procedure: substring-find-previous-char-ci string start end char

> Returns the index of the last occurrence of char in the string (substring); returns `#f` if char doesn't appear in the string. For the substring procedures, the index returned is relative to the entire string, not just the substring. The `-ci` procedures don't distinguish uppercase and lowercase letters.

— procedure: string-find-previous-char-in-set string char-set
— procedure: substring-find-previous-char-in-set string start end char-set

> Returns the index of the last character in the string (substring) that is also in char-set. For the substring procedure, the index returned is relative to the entire string, not just the substring.