🐈
正規表現入門決定版で、知識を補充した
https://qiita.com/nuco_bk/items/d48d763b205017f914ae の分からないところをざっと読んで、知識を補充しました。
ソースコード
module TestMatch
using Test
function main()
@testset "0、1、2のいずれかのあとに、3がある場合" begin
reg_exp = r"[012]3"
@test match(reg_exp, "03").match == "03"
@test match(reg_exp, "13").match == "13"
@test match(reg_exp, "23").match == "23"
@test match(reg_exp, "33") === nothing
@test match(reg_exp, "30") === nothing
end
@testset "0、1、2のいずれでもないあとに、3がある場合" begin
reg_exp = r"[^012]3"
@test match(reg_exp, "33").match == "33"
@test match(reg_exp, "43").match == "43"
@test match(reg_exp, "03") === nothing
@test match(reg_exp, "13") === nothing
@test match(reg_exp, "23") === nothing
end
@testset "0埋め数字2桁の場合" begin
reg_exp = r"^[0-9]{2}$"
@test match(reg_exp, "02").match == "02"
@test match(reg_exp, "53").match == "53"
@test match(reg_exp, "71").match == "71"
@test match(reg_exp, "103") === nothing
@test match(reg_exp, "7") === nothing
end
@testset "任意の3文字" begin
reg_exp = r"^...$"
@test match(reg_exp, "ながの").match == "ながの"
@test match(reg_exp, "こうち").match == "こうち"
@test match(reg_exp, "ぐん") === nothing
@test match(reg_exp, "おかやま") === nothing
end
@testset "0回以上の繰り返し" begin
reg_exp = r"a*"
@test match(reg_exp, "").match == ""
@test match(reg_exp, "a").match == "a"
@test match(reg_exp, "aa").match == "aa"
end
@testset "1回以上の繰り返し" begin
reg_exp = r"a+"
@test match(reg_exp, "a").match == "a"
@test match(reg_exp, "aa").match == "aa"
@test match(reg_exp, "") === nothing
end
@testset "0回または1回以上の繰り返し" begin
reg_exp = r"^a?$"
@test match(reg_exp, "").match == ""
@test match(reg_exp, "a").match == "a"
@test match(reg_exp, "aa") === nothing
end
@testset "最大量指定子と最小量指定子" begin
string = "「こんにちは」と「こんばんは」"
@test match(r"「.*」", string).match == "「こんにちは」と「こんばんは」" # 何も指定しない場合、最大量指定子になる。
@test match(r"「.*?」", string).match == "「こんにちは」" # ?をつけると最小量指定子になる。
end
end
end
if abspath(PROGRAM_FILE) == @__FILE__
using .TestMatch
TestMatch.main()
end
感想
先週分からなかった最大量指定子と最小量指定子について、理解出来ました。先読みや名前付きキャプチャまで進めるか悩み中です。
Discussion