该FastParse解析器组合子Scala库给你的.rep(n)"重复"的方法,让您创建一个新的解析器,试图解析givenParser n 或更多次.如果我想完全 n匹配,那么规范的方法是什么?
在我的情况下,我想解析一个40个字符的Git提交ID - 如果它超过40个字符,那不是一个提交ID,它不应该是匹配.
到目前为止,我在docs中找到的最接近的例子是:
val unicodeEscape = P( "u" ~ hexDigit ~ hexDigit ~ hexDigit ~ hexDigit )
Run Code Online (Sandbox Code Playgroud)
...通过简单的重复匹配4个字符(40个字符的提交ID详细).
这些是解析器组合器,而不是正则表达式,答案就是这样的\p{XDigit}{40}.
编译器不接受将元组直接传递给构造函数,如最小示例所示:
scala> case class A(a:Int, b:Int)
defined class A
scala> List((1, 2)).map(A)
<console>:14: error: type mismatch;
found : A.type
required: ((Int, Int)) => ?
List((1, 2)).map(A)
^
scala> List((1, 2)).map(A _)
<console>:14: error: _ must follow method; cannot follow A.type
List((1, 2)).map(A _)
^
Run Code Online (Sandbox Code Playgroud)
Scala 解析器组合器具有^^用于此的运算符。fastparse 库中有类似的东西吗?