Модуль Str
module Str: sig .. end
Регулярные выражения и высокоуровневая обработка строк
Регулярные выражения
Библиотека Str предоставляет регулярные выражения для последовательностей байтов. В целом она не подходит для сопоставления символов Unicode.
type regexp
Тип скомпилированных регулярных выражений.
val regexp : string -> regexp
Компилирует регулярное выражение. Распознаются следующие конструкции:
-
.Соответствует любому символу, кроме символа новой строки. -
*(постфиксный оператор) Соответствует предшествующему выражению ноль, один или несколько раз -
+(постфиксный оператор) Соответствует предшествующему выражению один или несколько раз -
?(постфиксный оператор) Соответствует предшествующему выражению один раз или ни разу -
[..]Набор символов. Диапазоны обозначаются с помощью-, например[a-z]. Начальный символ^, как в[^0-9], задаёт дополнение набора. Чтобы включить символ]в набор, поместите его первым символом набора. Чтобы включить символ-в набор, поместите его первым или последним символом набора. -
^Соответствует началу строки: либо началу сопоставляемой строки, либо позиции сразу после символа '\n'. -
$Соответствует концу строки: либо концу сопоставляемой строки, либо позиции непосредственно перед символом '\n'. -
\|(инфиксный оператор) Альтернатива между двумя выражениями. -
\(..\)Группировка и именование заключённого в скобки выражения. -
\1Текст, которому соответствует первое выражение\(...\)(\2— второе выражение и так далее до\9). -
\bСоответствует границам слов. -
\Экранирует специальные символы. Специальными являются символы$^\.*+?[].
В регулярных выражениях часто используются обратные косые черты; проще использовать строковый литерал в кавычках {|...|}, чтобы не экранировать обратные косые черты.
Например, следующее выражение:
let r = Str.regexp {|hello \([A-Za-z]+\)|} in
Str.replace_first r {|\1|} "hello world"
возвращает строку "world".
Если вам нужно регулярное выражение, соответствующее буквальному символу обратной косой черты, его нужно удвоить: Str.regexp {|\\|}.
Также можно использовать обычные строковые литералы "...", однако обратные косые черты придётся экранировать. Пример выше можно переписать с помощью обычного строкового литерала следующим образом:
let r = Str.regexp "hello \\([A-Za-z]+\\)" in
Str.replace_first r "\\1" "hello world" А регулярное выражение для сопоставления с обратной косой чертой будет состоять из четырёх обратных косых черт: Str.regexp "\\\\".
val regexp_case_fold : string -> regexp
То же, что и regexp, но скомпилированное выражение будет выполнять сопоставление без учёта регистра: прописные и строчные буквы будут считаться эквивалентными.
val quote : string -> string
Str.quote s возвращает строку регулярного выражения, которая соответствует в точности s и ничему больше.
val regexp_string : string -> regexp
Str.regexp_string s возвращает регулярное выражение, которое соответствует в точности s и ничему больше.
val regexp_string_case_fold : string -> regexp
Str.regexp_string_case_fold похожа на Str.regexp_string, но регулярное выражение выполняет сопоставление без учёта регистра.
Сопоставление и поиск строк
val string_match : regexp -> string -> int -> bool
string_match r s start проверяет, соответствует ли регулярному выражению r подстрока s, начинающаяся в позиции start. Как обычно, первый символ строки находится в позиции 0.
val search_forward : regexp -> string -> int -> int
search_forward r s start ищет в строке s подстроку, соответствующую регулярному выражению r. Поиск начинается в позиции start и продолжается в направлении конца строки. Возвращает позицию первого символа найденной подстроки.
-
Вызывает исключение
Not_found, если подходящая подстрока не найдена.
val search_backward : regexp -> string -> int -> int
search_backward r s last ищет в строке s подстроку, соответствующую регулярному выражению r. Сначала рассматриваются подстроки, начинающиеся в позиции last, а затем поиск продолжается в направлении начала строки. Возвращает позицию первого символа найденной подстроки.
-
Вызывает исключение
Not_found, если подходящая подстрока не найдена.
val string_partial_match : regexp -> string -> int -> bool
Похожа на Str.string_match, но также возвращает true, если строка-аргумент является префиксом строки, соответствующей шаблону. Сюда входит и случай полного совпадения.
val matched_string : string -> string
matched_string s возвращает подстроку s, найденную при последнем вызове одной из следующих функций сопоставления или поиска:
Str.string_matchStr.search_forwardStr.search_backwardStr.string_partial_matchStr.global_substituteStr.substitute_first
при условии, что между вызовами не вызывалась ни одна из следующих функций:
Str.global_replaceStr.replace_firstStr.splitStr.bounded_splitStr.split_delimStr.bounded_split_delimStr.full_splitStr.bounded_full_split
Примечание: в случае global_substitute и substitute_first вызов matched_string допустим только внутри аргумента subst, но не после возврата global_substitute или substitute_first.
Пользователь должен убедиться, что параметр s — это та же строка, которая была передана функции сопоставления или поиска.
val match_beginning : unit -> int
match_beginning() возвращает позицию первого символа подстроки, найденной при последнем вызове функции сопоставления или поиска (подробности см. в описании Str.matched_string).
val match_end : unit -> int
match_end() возвращает позицию символа, следующего за последним символом подстроки, найденной при последнем вызове функции сопоставления или поиска (подробности см. в описании Str.matched_string).
val matched_group : int -> string -> string
matched_group n s возвращает подстроку s, найденную n-й группой \(...\) регулярного выражения при последнем вызове функции сопоставления или поиска (подробности см. в описании Str.matched_string). Если n равно 0, возвращается подстрока, соответствующая всему регулярному выражению. Пользователь должен убедиться, что параметр s — это та же строка, которая была передана функции сопоставления или поиска.
-
Вызывает исключение
Not_found, еслиn-я группа регулярного выражения не совпала. Это может произойти с группами внутри альтернатив\|, необязательных выражений?или повторений*. Например, пустая строка соответствует\(a\)*, ноmatched_group 1 ""вызоветNot_found, поскольку сама первая группа не совпала.
val group_beginning : int -> int
group_beginning n возвращает позицию первого символа подстроки, найденной n-й группой регулярного выражения при последнем вызове функции сопоставления или поиска (подробности см. в описании Str.matched_string).
-
Вызывает исключение
-
Not_found, еслиn-я группа регулярного выражения не совпала. -
Invalid_argument, если регулярное выражение содержит менееnгрупп.
-
val group_end : int -> int
group_end n возвращает позицию символа, следующего за последним символом подстроки, найденной n-й группой регулярного выражения при последнем вызове функции сопоставления или поиска (подробности см. в описании Str.matched_string).
-
Вызывает исключение
-
Not_found, еслиn-я группа регулярного выражения не совпала. -
Invalid_argument, если регулярное выражение содержит менееnгрупп.
-
Замена
val global_replace : regexp -> string -> string -> string
global_replace regexp templ s возвращает строку, идентичную s, за исключением того, что все подстроки s, соответствующие regexp, заменяются на templ. Шаблон замены templ может содержать \1, \2 и т. д.; эти последовательности заменяются текстом, которому соответствует соответствующая группа регулярного выражения. \0 обозначает текст, которому соответствует всё регулярное выражение.
val replace_first : regexp -> string -> string -> string
То же, что и Str.global_replace, но заменяется только первая подстрока, соответствующая регулярному выражению.
val global_substitute : regexp -> (string -> string) -> string -> string
global_substitute regexp subst s возвращает строку, идентичную s, за исключением того, что все подстроки s, соответствующие regexp, заменяются результатом функции subst. Функция subst вызывается для каждой найденной подстроки и получает в качестве аргумента s (весь текст).
val substitute_first : regexp -> (string -> string) -> string -> string
То же, что и Str.global_substitute, но заменяется только первая подстрока, соответствующая регулярному выражению.
val replace_matched : string -> string -> string
replace_matched repl s возвращает текст замены repl, в котором \1, \2 и т. д. заменены текстом, которому соответствуют группы регулярного выражения при последнем вызове функции сопоставления или поиска (подробности см. в описании Str.matched_string). s должна быть той же строкой, которая была передана функции сопоставления или поиска.
Разбиение
val split : regexp -> string -> string list
split r s разбивает s на подстроки, используя в качестве разделителей подстроки, соответствующие r, и возвращает список подстрок. Например, split (regexp "[ \t]+") s разбивает s на слова, разделённые пробелами. Разделитель в начале или конце строки игнорируется.
val bounded_split : regexp -> string -> int -> string list
То же, что и Str.split, но строка разбивается не более чем на n подстрок; n — дополнительный целочисленный параметр.
val split_delim : regexp -> string -> string list
То же, что и Str.split, но разделители в начале и конце строки распознаются и возвращаются в виде пустых строк в результате. Например, split_delim (regexp " ") " abc " возвращает [""; "abc"; ""], тогда как split с теми же аргументами возвращает ["abc"].
val bounded_split_delim : regexp -> string -> int -> string list
То же, что и Str.bounded_split, но разделители в начале и конце строки распознаются и возвращаются в виде пустых строк в результате.
type split_result =
|
| Text of
|
|
| Delim of
|
val full_split : regexp -> string -> split_result list
То же, что и Str.split_delim, но возвращает также разделители, помимо подстрок между ними. Первые помечаются в результирующем списке как Delim, а вторые — как Text. Например, full_split (regexp "[{}]") "{ab}" возвращает [Delim "{"; Text "ab"; Delim "}"].
val bounded_full_split : regexp -> string -> int -> split_result list
То же, что и Str.bounded_split_delim, но возвращает также разделители, помимо подстрок между ними. Первые помечаются в результирующем списке как Delim, а вторые — как Text.
Извлечение подстрок
val string_before : string -> int -> string
string_before s n возвращает подстроку, состоящую из всех символов s, предшествующих позиции n (не включая символ в позиции n).
val string_after : string -> int -> string
string_after s n возвращает подстроку, состоящую из всех символов s, следующих за позицией n (включая символ в позиции n).
val first_chars : string -> int -> string
first_chars s n возвращает первые n символов строки s. Это та же функция, что и Str.string_before.
val last_chars : string -> int -> string
last_chars s n возвращает последние n символов строки s.
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/Str.html