匹配 Parboiled 中的 {N,M} 个字符
Match {N,M} chars in Parboiled
如何为
编写规则
至少 N 个字符 - 正则表达式 [a-z](2,}
最多 N 个字符 - 正则表达式 [a-z](,5}
从 N 到 M 个字符 - 正则表达式 [a-z]{3,10}
在半熟吗?
您可能正在寻找 times
组合器。您可以将 times
与单个 Int
一起使用(意味着将规则重复 n
次)或与 (Int, Int)
一起使用(意味着在 n
和 n
之间重复规则m
次)。您可以将 times
与 oneOrMore
、zeroOrMore
、~
和 !
一起使用以获得所需的效果:
//Matches regex "a{n,}"
rule {
n.times("a") ~ zeroOrMore("a") //match on n "a"s followed by zero or more "a"s (so at least n "a"s)
}
//Matches regex "a{,m}"
rule {
!(m.times("a") ~ oneOrMore("a")) //do not match on m "a"s followed by one or more "a" (so at most m "a"s)
}
//Matches regex "a{n, m)"
rule {
(n to m).times("a") ~ EOI
}
如何为
编写规则至少 N 个字符 - 正则表达式 [a-z](2,}
最多 N 个字符 - 正则表达式 [a-z](,5}
从 N 到 M 个字符 - 正则表达式 [a-z]{3,10}
在半熟吗?
您可能正在寻找 times
组合器。您可以将 times
与单个 Int
一起使用(意味着将规则重复 n
次)或与 (Int, Int)
一起使用(意味着在 n
和 n
之间重复规则m
次)。您可以将 times
与 oneOrMore
、zeroOrMore
、~
和 !
一起使用以获得所需的效果:
//Matches regex "a{n,}"
rule {
n.times("a") ~ zeroOrMore("a") //match on n "a"s followed by zero or more "a"s (so at least n "a"s)
}
//Matches regex "a{,m}"
rule {
!(m.times("a") ~ oneOrMore("a")) //do not match on m "a"s followed by one or more "a" (so at most m "a"s)
}
//Matches regex "a{n, m)"
rule {
(n to m).times("a") ~ EOI
}