Модуль Str
module Str: sig .. end
Регулярные выражения и обработка строк высокого уровня
Регулярные выражения
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 возвращает строку regexp, которая соответствует точно 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, но regexp сопоставляется без учёта регистра.
Сопоставление и поиск строк
val string_match : regexp -> string -> int -> bool
string_match r s start проверяет, соответствует ли подстрока s, начинающаяся с позиции start, регулярному выражению r. Первому символу строки, как обычно, соответствует позиция 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-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Str.html