当前位置: 首页 > 知识库问答 >
问题:

如何用SBT解析器匹配由可选空白包围的字符串

高云瀚
2023-03-14

我试图使用sbt解析器(http://www.scala-sbt.org/0.13/docs/parsing-input.html)解析sbt InputTask的命令行参数,但未能编写与以下伪regex匹配的解析器:

\w+(-n|--dry-run)\w+
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

共有1个答案

戴瑞
2023-03-14

您正在以错误的方式检查解析器的正确性。在本例中,您应该使用.resultemtty.isvalid而不是.result,就像在这里的测试中一样。然后,您的代码工作正常:

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
 类似资料:
  • 我正在寻找一个正则表达式,它可以做到这一点:我的文本: 我想提取的是: 有人有主意吗? 我试过:

  • 我正在编写一个php类来从csv文件中提取数据。所以正则表达式需要帮助。 数据样本 正则表达式 这不应该匹配第1、2和7行,因为它在数据和字段后只有空格和制表符(空白) 这是我的regex测试程序链接https://regex101.com/r/xpG25l/1/

  • 我有以下两个日期: 2009年10月8日 我正在使用Jackson将日期从rest api转换为joda Datetime。 我以为模式“dd MMM.yyyy”可以工作,但“may”没有点,所以在那一点上崩溃了。 有没有解决方案,或者我必须自己编写datetime解析器? jackson中的注释是: 所以只允许有一种约会模式。

  • 使用我发现研究如何在字符串的字符之间插入空格的代码(这里),我修改了结果,但这并没有在“你好”和“世界”之间的空格周围插入额外的空格——你能让我知道我错过了什么吗?还有,L%2是做什么的?谢谢!将结果输出到浏览器是很重要的。

  • 我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点:

  • 我创建了一个简单的RESTendpoint: 我实例化了一个改型: 我的服务: 现在,尝试调用数据: null 但我不知道如何使改型2使用这个。 提前谢了。