Використання регулярних виразів

Elixir:
Використання регулярних виразів

Як це зробити:

Elixir використовує модуль Regex, вдаючись до бібліотеки regex Erlang, для операцій з regex. Ось базові способи використання:

# Знаходження збігу з шаблоном - Повертає перший збіг
result_match = Regex.run(~r/hello/, "hello world")
IO.inspect(match_result) # Вивід: ["hello"]

# Пошук усіх збігів
all_matches = Regex.scan(~r/\d/, "Тут є 2 яблука та 5 апельсинів.")
IO.inspect(all_matches) # Вивід: [["2"], ["5"]]

# Заміна частин рядка
replaced_string = Regex.replace(~r/\s+/, "Elixir це весело", "_")
IO.inspect(replaced_string) # Вивід: "Elixir_це_весело"

Для більш складних шаблонів та функціоналу можливо вам захочеться скористатися сторонніми бібліотеками, хоча для більшості основних завдань з рядками та зіставленням шаблонів вбудований модуль Regex Elixir є досить потужним.

Для виконання пошуку без врахування регістру, використовуйте опцію i:

case_insensitive_match = Regex.run(~r/hello/i, "Hello World")
IO.inspect(case_insensitive_match) # Вивід: ["Hello"]

Регулярні вирази можна попередньо скомпілювати для підвищення ефективності при їх багаторазовому використанні:

precompiled_regex = Regex.compile!("hello")
match_result_precompiled = Regex.run(precompiled_regex, "hello world")
IO.inspect(match_result_precompiled) # Вивід: ["hello"]

Elixir також підтримує іменовані захвати, що може бути дуже зручно для витягування конкретних частин рядка, одночасно роблячи ваш код більш читабельним:

date_string = "2023-04-15"
pattern = ~r/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
{:ok, captures} = Regex.run(pattern, date_string, capture: :all_names)
IO.inspect(captures) # Вивід: %{"year" => "2023", "month" => "04", "day" => "15"}

Цей короткий огляд підкреслює легкість, з якою Elixir обробляє регулярні вирази, дозволяючи використовувати потужні техніки маніпуляції рядками та витягування даних.