如何处理 (\w+)+?正则表达式作为模式匹配scala中的字符串列表

How to handle (\w+)+? regex as string list in pattern matching scala

我正在开发一个 Scala 项目。事实上,我应该创建一些命令,例如 CLI 命令。例如:退出、帮助、加载文件名、查找名称。 我想用正则表达式模式匹配来处理这些命令。但是我有一些问题。如果字符串是"load filename",文件名可以被处理。但是,如果字符串是 "load filename1 filename2",我无法同时处理文件名 1 和文件名 2。

我的代码如下:

val help = """help""".r
val exit = """exit""".r
val load = """load(\s+\w+)+?\s*""".r
val find = """findbyName(\s+\w+)+?\s*""".r

val input = "load filename1"
 input match {
    case help() => println("help")
    case exit() => println("exit)
    case load(filename) => println(filename)
    case find(name) => println(name)
    case _ => println "error"
  }

***********************
console: filename1

如果有 n 个文件名,我想打印所有文件名。我该如何继续?

我认为您可以先使用以下方法捕获文件名:

load\s((?:\w+\s?)+)

DEMO

然后 split() 使用 \s、“ ”或您认为在项目中有效的其他字符捕获组。

我不确定它在 Scala 中是如何工作的,但我也会尝试使用:

load\s(\w+\s?)|(?<=\G)(\w+)\s?

DEMO

使用\G边界,只在前面匹配之后才匹配。我认为您可以单独获取所有文件名。