11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自衛官からエンジニアへ Elixirから始める Web開発 Part22

Last updated at Posted at 2023-12-21

この記事は「Elixir Advent Calendar 2023」22日目の記事です
東京にいるけどfukuokaexのYOSUKEです。

普段は 合同会社TheWaggle で教材開発・システム開発・研修講師などマルチに活動してます。

このシリーズでは、文系ですらない、体育会系でも始められるプログラミング学習 というテーマで元自衛官だった僕が
自衛官からエンジニアになってもらいたいという気持ちを込めて、普段は大人しいですが、このコラムシリーズでは、あえて、体育会系のノリで、貴様ら理屈で覚えるなら体で覚えろ!というノリで書いてみたいと思います。

なので、初学者向けですが、理論は後回し、まずは動かして体感しろってノリの第22回目です。

それでは、いくぞ!

多目的ナイフと正規表現

よーし、貴様ら! 今日は前回に伝えたコードの中から、貴様らが最も気になっているであろう、~r/[gml]/この部分について説明してやろう!

defmodule TNT do
  def create_c4({"RDX", rdx}, {"ポリイソブチレン", polyisobutylene}, {"モーターオイル", motorOil}, {"セバシン酸ジオクチル", dioctylSebacate}, {"ガソリン", gasoline}) do
    materials = [rdx, polyisobutylene, motorOil, dioctylSebacate, gasoline]

    Enum.map(materials, &convert_material_to_numeric/1)
  end

  defp convert_material_to_numeric(material) do
    numeric_part = String.replace(material, ~r/[gml]/, "")
    
    convert_to_numeric(numeric_part)
  end

  defp convert_to_numeric(numeric_part) do
    if String.contains?(numeric_part, ".") do
      String.to_float(numeric_part)
    else
      String.to_integer(numeric_part)
    end
  end
end

このコードの ~r/[gml]/ は、正規表現というものを使っている。これは「g」、「m」、または「l」のいずれかの文字を探す命令だ。まるで、偵察隊が特定の目標を探しているようなものだ。敵の隊列を探すのと同じく、この命令は特定のパターンを見つけ出す。

次に、String.replace(material, ~r/[gml]/, "") だ。これは、見つけた「g」、「m」、または「l」を除去する。敵の通信を妨害するように、ここでは無用な文字を排除している。

このように、正規表現は特定のパターンを見つけ、それに基づいてアクションを起こす。それは戦闘での戦術と同じだ。目標を特定し、命令に従って行動する。この技術をマスターすれば、コードの中でより効率的に操作ができるようになる。

正規表現

正規表現とは、いわば「多目的ナイフ」や「十徳ナイフ」のようなものだ。なぜなら、正規表現は一つのツールで多くの異なるタスクをこなすことができ、非常に汎用性が高いからだ。

考えてみろ、多目的ナイフは一つの道具で、刃物、はさみ、ノコギリ、栓抜きなど、様々な機能を持っている。これと同じように、正規表現も一つの「パターン」や「式」で、文字列の検索、置換、データの抽出といった多くの操作を行うことができる。

戦場での状況は常に変わる。敵の配置、地形、天候など、戦闘に影響を与える要素は数え切れない。これに対応するためには、柔軟で汎用的なツールが必要だ。正規表現も同様で、さまざまな文字列処理の問題に対して、一つの強力なツールとして機能する。

そんな多目的ナイフの使い方を今から教えてやるから覚えておけ!

正規表現(Regular Expression)とは、文字列の中から特定のパターンを見つけ出し、操作するための強力なツールだ。複雑で多様な状況に対応できる。正規表現は、文字列の検索、置換、データの抽出に使用される。

基本的な構成要素を見ていくぞ

  1. リテラル文字: 通常の文字(例:a、B、1)は、それ自体が検索対象となる。

  2. ドット .: 任意の一文字にマッチする。例えば、a.bacbaabaxb などにマッチする。

  3. 文字クラス []: 括弧内の任意の一文字にマッチする。例:[abc]abc のいずれかにマッチする。

  4. 繰り返し *+: * は直前の要素が0回以上の繰り返しにマッチし、+ は1回以上の繰り返しにマッチする。例:a*bbabaab などにマッチする。

  5. エスケープ \: 特殊文字を普通の文字として扱うために使う。例:. は任意の文字にマッチするが、\. はピリオド自体にマッチする。

  6. 開始 ^ と終了 $: ^ は文字列の開始部分、$ は終了部分にマッチする。例:^abc は「abc」で始まる任意の文字列にマッチする。

これらは基本的な要素だ。しかし正規表現にはもっと多くの機能がある。より複雑なパターンを作成できるように、これらの要素を組み合わせて使う。

例えば、~r/[gml]/ は「g」、「m」、または「l」のいずれか一文字にマッチする。これを使えば、文字列から特定の文字を見つけ出し、操作できる。

分かったか、貴様ら!これはただの基本だ。正規表現は、様々な状況に応じて変化する戦術のようなもの。これをマスターするには、実践が必要だ。訓練を重ね、この知識を武器に変えろ!

今日はここまで、それでは次回 Part23でまた会おう!

11
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?