🌟

正規表現の肯定の先読みを使って任意の文字列が含まれるか判定する

2023/05/08に公開

正規表現の肯定の先読みを使って任意の文字列が含まれるか判定してみました。

やってみた

module Regex
using Test

function main()
    @testset "肯定の先読みを使って任意の文字列が含まれるか判定する" begin
        reg_exp = r"(?=.*赤犬.*).*"

        @test match(reg_exp, "三大将の赤犬、青キジ、黄猿が遊びにきた").match == "三大将の赤犬、青キジ、黄猿が遊びにきた"
        @test match(reg_exp, "黄猿は、 八尺瓊勾玉という技をもっている") === nothing
        @test match(reg_exp, "赤犬は、 大噴火という技をもっている").match == "赤犬は、 大噴火という技をもっている"
    end

    @testset "肯定の先読みを使って任意の文字列が複数含まれるか判定する" begin
        reg_exp = r"(?=.*赤犬.*)(?=.*青キジ.*)(?=.*黄猿.*).*" # 肯定の先読み

        @test match(reg_exp, "三大将の赤犬、青キジ、黄猿が遊びにきた").match == "三大将の赤犬、青キジ、黄猿が遊びにきた"
        @test match(reg_exp, "黄猿は、 八尺瓊勾玉という技をもっている") === nothing
        @test match(reg_exp, "赤犬は、 大噴火という技をもっている") === nothing
    end
end
end

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

    Regex.main()
end

解説

肯定の先読みとは、指定した文字列の直前に一致する正規表現になります。よって(?=.*赤犬.*)(?=.*青キジ.*)(?=.*黄猿.*)とは直前に赤犬、青キジ、黄猿の位置で一致します。

Discussion