unittest { // 1以上の数字 alias rng!('1', '9') n1; // 0以上の数字 alias rng!('0', '9') n0; // カンマ区切り数字の先頭。最初の1桁は[1, 9]で、カンマの出てこない最初の3桁まで alias seq!(n1, opt!n0, opt!n0) digitsHead; // 数字のカンマで区切られている末尾部分。 alias seq!(ch!',', n0, n0, n0) digitsTail; // ゼロの場合 alias seq!(ch!'0', end) zero; // 数字。ゼロまたは数字列 alias sel!(zero, seq!(digitsHead, more0!digitsTail, end)) digits; // 以下は成功するソース foreach(s; [ "0", "1", "12", "