3

文字列に一致するLPegパターンを作成しようとしています:

  • 手紙で始める
  • それ以降は英数字を含む
  • 2 つ以上の連続するハイフンを含まない (例: disallows test--string)

参考までに、正規表現[a-zA-Z](-?[a-zA-Z0-9])*は探しているものと一致します。

参考までに、私が作業しているコードは次のとおりです。

require "lpeg"
P,R,C = lpeg.P,lpeg.R,lpeg.C

dash  = P"-"
ucase  = R"AZ"
lcase  = R"az"
digit  = R"09"
letter = ucase + lcase
alphanum = letter + digit

str_match = C(letter * ((dash^-1) * alphanum)^0)

strs = {
    "1too",
    "too0",
    "t-t-t",
    "t-t--t",
    "t--t-t",
    "t-1-t",
    "t--t",
    "t-one1",
    "1-1",
    "t-1",
    "t",
    "tt",
    "t1",
    "1",
}

for _,v in ipairs(strs) do
    if lpeg.match(str_match,v) ~= nil then
        print(v," => match!")
    else
        print(v," => no match")
    end
end

ただし、非常にイライラすることに、次の出力が得られます。

1too     => no match
too0     => match!
t-t-t    => match!
t-t--t   => match!
t--t-t   => match!
t-1-t    => match!
t--t     => match!
t-one1   => match!
1-1      => no match
t-1      => match!
t        => match!
tt       => match!
t1       => match!
1        => no match

コードが何を出力したとしても、t-t--tt--t-t、およびt--tは一致しないはずです。

4

1 に答える 1