标签: fastparse

如何使用FastParse准确匹配'n'给定的字符

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 parser-combinators fastparse

3
推荐指数
1
解决办法
417
查看次数

为什么我不能使用 case 类的构造函数作为函数在 map() 中使用

编译器不接受将元组直接传递给构造函数,如最小示例所示:

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 库中有类似的东西吗?

lambda scala parser-combinators case-class fastparse

2
推荐指数
1
解决办法
78
查看次数