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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |