Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在不知道正则表达式是否匹配的情况下使用正则表达式提取子字符串(组)?_Regex_Scala - Fatal编程技术网

Regex 如何在不知道正则表达式是否匹配的情况下使用正则表达式提取子字符串(组)?

Regex 如何在不知道正则表达式是否匹配的情况下使用正则表达式提取子字符串(组)?,regex,scala,Regex,Scala,我想用这个 val r = """^myprefix:(.*)""".r val r(suffix) = line println(suffix) 但是当字符串不匹配时,它会给出一个错误。如果匹配是可选的,如何使用类似的构造 编辑:为了清楚起见,我需要组(.*)试试看 r.findFirstIn(line) UPD: scala>val rgx=“^myprefix:(.*)”。r rgx:scala.util.matching.Regex=^myprefix:(.*)的名称 scala>v

我想用这个

val r = """^myprefix:(.*)""".r
val r(suffix) = line
println(suffix)
但是当字符串不匹配时,它会给出一个错误。如果匹配是可选的,如何使用类似的构造

编辑:为了清楚起见,我需要组
(.*)

试试看

r.findFirstIn(line)
UPD:

scala>val rgx=“^myprefix:(.*)”。r
rgx:scala.util.matching.Regex=^myprefix:(.*)的名称
scala>val line=“myprefix:value”
行:java.lang.String=myprefix:value

scala>for(rgx(group)您可以通过模式匹配提取匹配组

val r = """^myprefix:(.*)""".r
line match {
  case r(group) => group
  case _ => ""
}
使用
选项的另一种方法是:

Option(line) collect { case r(group) => group }
这样做的好处是,您可以将其作为一个单行程序编写,而无需将正则表达式指定给中间值
r


如果您想知道,组0是匹配的字符串,而组1等是捕获组。

那么,当正则表达式不匹配时,应该返回什么,一个空字符串?我不在乎,只要程序不退出……还有一个if“contains”或者类似的就可以了,它必须简短优雅。但是它返回整个匹配,我想要组(在我的例子中是后缀),如果(!r.findFirstIn(line.isEmpty){val r(suffix)=line println(suffix)},我可以这样使用它但这看起来很奇怪…我刚刚尝试了这个,val名称不需要大写(至少在windows上的scala 2.9.2上是这样)哦,对了,只有没有匹配组才有必要。这里的基本sytax是什么?为什么
Option(line) collect { case r(group) => group }
"""^myprefix:(.*)""".r        // Regex
  .findFirstMatchIn(line)     // Option[Match]
  .map(_ group 1)             // Option[String]