この記事は Elixir その2 Advent Calendar 2020 12日目です。
前回はNimbleCSVのご紹介(Elixir)でした。
はじめに
- Elixir 楽しんでいますか!
-
プログラミングElixir 第2版 発売中!
String.replace/3
- を紹介します
-
IEx
に聞いてみましょう
$ iex
iex> h String.replace/3
def replace(subject, pattern, replacement, options \\ [])
Returns a new string created by replacing occurrences of pattern in subject
with replacement.
The subject is always a string.
The pattern may be a string, a regular expression, or a compiled pattern.
The replacement may be a string or a function that receives the matched pattern
and must return the replacement as a string or iodata.
By default it replaces all occurrences but this behaviour can be controlled
through the :global option; see the "Options" section below.
## Options
• :global - (boolean) if true, all occurrences of pattern are replaced
with replacement, otherwise only the first occurrence is replaced. Defaults
to true
## Examples
iex> String.replace("a,b,c", ",", "-")
"a-b-c"
iex> String.replace("a,b,c", ",", "-", global: false)
"a-b,c"
The pattern may also be a list of strings and the replacement may also be a
function that receives the matches:
iex> String.replace("a,b,c", ["a", "c"], fn <<char>> -> <<char + 1>> end)
"b,b,d"
When the pattern is a regular expression, one can give \N or \g{N} in the
replacement string to access a specific capture in the regular expression:
iex> String.replace("a,b,c", ~r/,(.)/, ",\\1\\g{1}")
"a,bb,cc"
Notice we had to escape the backslash escape character (i.e., we used \N
instead of just \N to escape the backslash; same thing for \g{N}). By giving
\0, one can inject the whole match in the replacement string.
A compiled pattern can also be given:
iex> pattern = :binary.compile_pattern(",")
iex> String.replace("a,b,c", pattern, "[]")
"a[]b[]c"
When an empty string is provided as a pattern, the function will treat it as an
implicit empty string between each grapheme and the string will be
interspersed. If an empty string is provided as replacement the subject will be
returned:
iex> String.replace("ELIXIR", "", ".")
".E.L.I.X.I.R."
iex> String.replace("ELIXIR", "", "")
"ELIXIR"
- わかりやすいですね!
どんなとき使うの?
- こんなことがありました
- markdownで書いた表がズレているのです
- 56番
- 記事のタイトルに
|
が含まれていて、それが表の区切りと区別がつかないのですね -
ElixirはPipe Operator |> が人気がありますので、
|
は記事タイトルで使われることはよくありそうです
|56|NeosVR+Elixirで気軽にVR WebSocketプログラミング(VR |> AR投影アプリの裏側)<br>@piacerex|2020-12-11|3|
|57|実験: レガシーなImage ProcessingをElixirのパイプで書いてみる<br>@ShozF|2020-12-09|3|
...
String.replace/3の出番です!
iex> String.replace("NeosVR+Elixirで気軽にVR WebSocketプログラミング(VR |> AR投影アプリの裏側)", "|", "|")
"NeosVR+Elixirで気軽にVR WebSocketプログラミング(VR |> AR投影アプリの裏側)"
-
|
が|
に置きかわっていますね!
(表がいい感じになりましたね!)
- エスケープは、@takashisiteさんのMarkdownのtable記述でのエスケープを参考にしました
- ありがとうございます!
- 令和二年なのにいまだにRaspberry Pi 2を使っていてその上で動いているNervesアプリが自動更新している【毎日自動更新】QiitaのElixir LGTMランキング!で表がおかしくなる問題は以前からありました
- おなじように
|
をタイトルに含んでいると発生するわけです - たとえば、マイブーム |> if(do: "Yes", else: "No") [Elixir]という私の記事なので、まあいいやと見て見ぬ振りをしていました
- @piacerex さんの記事なのでこれを機に対応してみました
- そしてそれをアドベントカレンダーネタにしてみました
- おなじように
Wrapping Up
-
ElixirのわからないことはElixir (
IEx
)に聞くと教えてもらえる - ネタはそのへんに転がっているので、Elixir その2 Advent Calendar 2020 完走できる!(はず)
- @mnishiguchi さん、たすきしっかりつなぎますのでよろしくお願いします
- Enjoy Elixir!!!