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

时间:2015-08-03 15:14:03

标签: regex string scala pattern-matching

我正在开发一个scala项目。实际上,我应该创建一些命令,如CLI命令。例如:exit,help,load filename,find name。 我想用正则表达式模式匹配来处理这些命令。但我有一些问题。如果string是“load filename”,则可以处理文件名。但是如果string是“load filename1 filename2”,我无法一起处理filename1和filename2。

我的代码如下:

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个文件名,我想打印所有文件名。我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

fee1 + fee2

DEMO

然后load\s((?:\w+\s?)+) 抓取了split()组," "或您在项目中发现的其他角色。

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

\s

DEMO

女巫使用load\s(\w+\s?)|(?<=\G)(\w+)\s? boudary,只有在匹配之后匹配。我想你可以得到所有的文件名。