Elixir:
การใช้เรกุลาร์เอ็กเพรสชัน
วิธีการ:
Elixir ใช้โมดูล Regex
, โดยใช้ประโยชน์จากไลบรารี regex ของ Erlang, สำหรับการดำเนินการ regex นี่คือการใช้งานพื้นฐาน:
# จับคู่รูปแบบ - คืนค่าการจับคู่แรก
match_result = Regex.run(~r/hello/, "hello world")
IO.inspect(match_result) # ผลลัพธ์: ["hello"]
# การหาการจับคู่ทั้งหมด
all_matches = Regex.scan(~r/\d/, "There are 2 apples and 5 oranges.")
IO.inspect(all_matches) # ผลลัพธ์: [["2"], ["5"]]
# การแทนที่ส่วนของสตริง
replaced_string = Regex.replace(~r/\s+/, "Elixir is fun", "_")
IO.inspect(replaced_string) # ผลลัพธ์: "Elixir_is_fun"
สำหรับรูปแบบและฟังก์ชันการทำงานที่ซับซ้อนกว่านี้, คุณอาจพิจารณาใช้ไลบรารี่ของบุคคลที่สาม, ถึงกระนั้นสำหรับงานจับคู่สตริงและรูปแบบหลัก ๆ, โมดูล Regex
ภายในตัวของ Elixir ก็มีประสิทธิภาพอย่างมาก
เพื่อทำการจับคู่โดยไม่คำนึงถึงตัวพิมพ์ใหญ่หรือพิมพ์เล็ก, ใช้ตัวเลือก i
:
case_insensitive_match = Regex.run(~r/hello/i, "Hello World")
IO.inspect(case_insensitive_match) # ผลลัพธ์: ["Hello"]
นิพจน์ regex สามารถคอมไพล์ล่วงหน้าเพื่อประสิทธิภาพเมื่อใช้งานหลายครั้ง:
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, ทำให้สามารถใช้กลวิธีการจัดการสตริงและวิธีการสกัดข้อมูลที่มีประสิทธิภาพได้。