scala – 如何将可选空格包围的字符串与SBT Parsers匹配
发布时间:2020-12-16 19:23:42 所属栏目:安全 来源:网络整理
导读:我正在尝试使用SBT Parsers( http://www.scala-sbt.org/0.13/docs/Parsing-Input.html)解析sbt InputTask的命令行参数,但是我没有编写解析器来匹配以下伪正则表达式: w+(-n|--dry-run)w+ 这是我能想到的最明智的表达方式.如果输入字符串匹配,则此处的结果
|
我正在尝试使用SBT Parsers(
http://www.scala-sbt.org/0.13/docs/Parsing-Input.html)解析sbt InputTask的命令行参数,但是我没有编写解析器来匹配以下伪正则表达式:
w+(-n|--dry-run)w+ 这是我能想到的最明智的表达方式.如果输入字符串匹配,则此处的结果应为Some(true). import sbt.complete.Parser
import sbt.complete.DefaultParsers._
val dryRunOptions: Parser[String] = OptSpace ~> ("-n" | "--dry-run") <~ OptSpace
val dryRunParser: Parser[Boolean] = flag(dryRunOptions)
Parser(dryRunParser)("-n").result
Parser(dryRunParser)(" -n").result
Parser(dryRunParser)("-n ").result
Parser(dryRunParser)(" -n ").result
Parser(dryRunParser)("--dry-run").result
Parser(dryRunParser)(" --dry-run").result
Parser(dryRunParser)("--dry-run ").result
Parser(dryRunParser)(" --dry-run ").result
不幸的是,这与任何这些情况都不匹配! res0: Option[Boolean] = None res1: Option[Boolean] = None res2: Option[Boolean] = None res3: Option[Boolean] = None res4: Option[Boolean] = None res5: Option[Boolean] = None res6: Option[Boolean] = None res7: Option[Boolean] = None 我可以通过几种变体来匹配几种情况,但绝不会全部.任何帮助赞赏! 解决方法
您正在以错误的方式检查解析器的正确性.看起来在这种情况下你应该使用.resultEmpty.isValid而不是.result,就像在
tests here中一样.然后你的代码运行正常:
import sbt.complete.Parser
import sbt.complete.DefaultParsers._
val dryRunOptions: Parser[String] = OptSpace ~> ("-n" | "--dry-run") <~ OptSpace
val dryRunParser: Parser[Boolean] = flag(dryRunOptions)
val test = Seq("-n"," -n","-n "," -n ","--dry-run"," --dry-run","--dry-run "," --dry-run ")
test.foldLeft(true)((b:Boolean,input:String) =>
b && Parser(dryRunParser)(input).resultEmpty.isValid)
结果如下: res0: Boolean = true (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
