l.alpha*2
ですl.alpha
*
l.P(2)
。
いいえ、それは一致し[a-z]..
ます。
からの出力を参照して、lpeg.print(timezone)
それを確認してください。ll
(ロケール データに を使用していることに注意してください。同じテーブルに配置すると、元のprint
デバッグ機能が失われます。)
> l=require"lpeg"
> ll=lpeg.locale()
> p=ll.alpha*2
> l.print(p)
[]
00: set [(41-5a)(61-7a)]-> FAIL
05: any * 2-> FAIL
06: end
> =p.match("099")
nil
> =p.match("EST")
4
> =p.match("E99")
4
必要なパターンは次のとおりです。
> function patcount(pat, min, max)
>> return -pat^(max + 1) * pat^min
>> end
> p=patcount(ll.alpha, 3, 3)
> lpeg.print(p)
[]
00: set [(41-5a)(61-7a)]-> 27
05: choice -> 27 (1)
06: set [(41-5a)(61-7a)]-> FAIL
11: set [(41-5a)(61-7a)]-> FAIL
16: set [(41-5a)(61-7a)]-> FAIL
21: span [(41-5a)(61-7a)]
26: failtwice
27: set [(41-5a)(61-7a)]-> FAIL
32: set [(41-5a)(61-7a)]-> FAIL
37: set [(41-5a)(61-7a)]-> FAIL
42: span [(41-5a)(61-7a)]
47: end
> =p:match("EST")
4
> return p:match("ES")
nil
> return p:match("ESTT")
nil
> return p:match("099")
nil
> return p:match("E99")
nil
関連するドキュメントのビットは-patt
.
l.alpha*2
マニュアルからのこの引用で説明されている構文について。
引数としてパターンを期待するすべての操作は、関数 lpeg.P の規則に従ってパターンに変換される文字列、テーブル、数値、ブール値、または関数も受け取ることができます。
つまり、オペランドの 1 つがすでにパターンである場合、演算子は非パターンをパターンに変換します。
LpegRecipes lua-users.org wiki ページには、「パターンの一定回数の繰り返しに一致させる」セクション (およびリンク) もあります。(しかし、私はその実装をまったく調べていません。上記の実装よりも複雑に見えます。)