🕌
初心者歓迎!手と目で覚える正規表現入門・その4(最終回)「中級者テクニックをマスターしよう」で、知識を補充した
https://qiita.com/jnchito/items/b0839f4f4651c29da408 の分からないところをざっと読んで、知識を補充しました。
ソースコード
module TestMatch
using Test
function main()
@testset "単語境界に一致させる" begin
reg_exp = r"\bhide\b"
@test match(reg_exp, "hide hid hidden hiding hides").match == "hide"
end
@testset "「葵」の後に「祭」がある" begin
reg_exp = r"葵(?=祭)" # 肯定の先読み
@test match(reg_exp, "葵わかな 葵徳川三代 葵祭").match == "葵"
end
@testset "「葵」の後に「祭」がない" begin
reg_exp = r"葵(?!祭)" # 否定の先読み
@test match(reg_exp, "葵徳川三代 葵祭").match == "葵"
end
@testset "「ラーメン」の前に「塩」がある" begin
reg_exp = r"(?<=塩)ラーメン" # 肯定の後読み
@test match(reg_exp, "塩ラーメン 醤油ラーメン").match == "ラーメン"
end
@testset "「ラーメン」の前に「塩」がない" begin
reg_exp = r"(?<!塩)ラーメン" # 否定の後読み
@test match(reg_exp, "醤油ラーメン").match == "ラーメン"
end
@testset "キャプチャについて" begin
@test match(r"(\d{2}):(\d{2}):(\d{2})", "09:02:46").captures == ["09", "02", "46"]
end
@testset "名前付きキャプチャについて" begin
m = match(r"(?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2})", "09:02:46")
@test m[:hour] == "09"
@test m[:minute] == "02"
@test m[:second] == "46"
end
end
end
if abspath(PROGRAM_FILE) == @__FILE__
using .TestMatch
TestMatch.main()
end
感想
肯定の先読み、否定の先読み、肯定の後読み、否定の後読みなどなど知らなかったことが分かって良かったです。次回は、バックトラックでのパフォーマンス悪化について学習するつもりです。
Discussion