Spec-Zone.ru › OCaml 5.0

Модуль 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_match
  • Str.search_forward
  • Str.search_backward
  • Str.string_partial_match
  • Str.global_substitute
  • Str.substitute_first

при условии, что ни одна из следующих функций не была вызвана между ними:

  • Str.global_replace
  • Str.replace_first
  • Str.split
  • Str.bounded_split
  • Str.split_delim
  • Str.bounded_split_delim
  • Str.full_split
  • Str.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 string
| Delim of string
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/5.0/htmlman/libref/Str.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API