🎉

# 正規表現 オンライン教材の基本編をJulia言語で解いた

2023/03/25に公開

http://www2.otani.ac.jp/fkdsemi/seikihyogen/mondai.html の基本編をJulia言語で解きました。

## 解答

``````module TestMatch
using Test

function main()
@testset "数字の取り出し" begin
reg_exp = r"[1-9]?\d"

@test occursin(reg_exp, "0") == true
@test occursin(reg_exp, "1") == true
@test occursin(reg_exp, "7") == true
@test occursin(reg_exp, "19") == true
@test occursin(reg_exp, "45") == true
@test occursin(reg_exp, "79") == true
@test occursin(reg_exp, "99") == true
end

@testset "単語ごとに取り出す" begin
reg_exp = r"(.*)"

@test occursin(reg_exp, "パン") == true
@test occursin(reg_exp, "トマト") == true
@test occursin(reg_exp, "チーズ") == true
@test occursin(reg_exp, "ハム") == true
@test occursin(reg_exp, "卵") == true
@test occursin(reg_exp, "マヨネーズ") == true
end

@testset "５の倍数を検索" begin
reg_exp = r"(0|5)\$"

@test occursin(reg_exp, "5") == true
@test occursin(reg_exp, "7") == false
@test occursin(reg_exp, "10") == true
@test occursin(reg_exp, "14") == false
@test occursin(reg_exp, "20") == true
@test occursin(reg_exp, "90") == true
@test occursin(reg_exp, "138") == false
@test occursin(reg_exp, "205") == true
end

@testset "2の倍数を検索" begin
reg_exp = r"(0|2|4|6|8)\$"

@test occursin(reg_exp, "2") == true
@test occursin(reg_exp, "4") == true
@test occursin(reg_exp, "5") == false
@test occursin(reg_exp, "7") == false
@test occursin(reg_exp, "16") == true
@test occursin(reg_exp, "73") == false
@test occursin(reg_exp, "64") == true
@test occursin(reg_exp, "122") == true
end

@testset "日付への一致1" begin
reg_exp = r"\d{1,2}/\d{1,2}"

@test occursin(reg_exp, "1月1日") == false
@test occursin(reg_exp, "5/21") == true
@test_skip occursin(reg_exp, "10/46") == false
@test occursin(reg_exp, "7/14") == true
@test occursin(reg_exp, "3/6") == true
@test occursin(reg_exp, "6月7日") == false
end

@testset "基礎的な置換１" begin
string = "近代的なオフィスにはコンピューターは無くてはならない存在です。コンピューターの導入は、作業の効率化やペーパーレス化をもたらしました。"
reg_exp = r"コンピューター"
expected = "近代的なオフィスにはコンピュータは無くてはならない存在です。コンピュータの導入は、作業の効率化やペーパーレス化をもたらしました。"

@test replace(string, reg_exp => "コンピュータ") == expected
end

@testset "基礎的な置換１" begin
string = "<h1>Python入門</h1><h2>Pythonとはどんな言語か</h2><p>Pythonは、コンパイルを必要としないスクリプト言語の一つで、欧米ではPerlに次ぐほどの人気を誇っています。</p>"
reg_exp = r"(<h1>)|(</h1>)|(<h2>)|(</h2>)(<p>)|(</p>)"
expected = "Python入門Pythonとはどんな言語かPythonは、コンパイルを必要としないスクリプト言語の一つで、欧米ではPerlに次ぐほどの人気を誇っています。"

@test replace(string, reg_exp => "") == expected
end
end
end

if abspath(PROGRAM_FILE) == @__FILE__
using .TestMatch

TestMatch.main()
end
``````

## 感想

プログラマー雑談というポッドキャストを聞きながら、解きました。普段のプログラミングとは異なり独特の考え方が求められていて、難しいですね〜。