私は、文字列と一致するようにLPegパターンを書き込むしようとしている:LPegパターン
- はその後
- が二つが含まれていない文字の英数字の文字
- で始まるを以上の連続したハイフン(例えば禁止し
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--t
、t--t-t
、t--t
は一致しません。
を行う必要があります^ -1) *英数字)^ 0'!あなたは、 "グループには最大で1つのダッシュとそれに続く1つの英数字の可能性をグループ化します。これはすべて0回以上発生します。"だからあなたのパターンは、最初の手紙で失敗することができます。 – Youka