如何在scala中匹配包含加号(+)的字符串?

时间:2018-06-08 20:52:13

标签: regex scala

我正在尝试匹配两个带有'+'符号的字符串。

val mystring = "test+string"
val tomatch = "test+string"

mystring.matches(tomatch)
This returns False.

尝试使用\ +来逃避+但是它不起作用。

1 个答案:

答案 0 :(得分:3)

转义+是正确的,因为\+与文字+匹配。需要以正则表达式模式转义的字符数量更多,请参阅What special characters must be escaped in regular expressions?

在Scala中,您可以使用"""...."""三引号字符串文字来仅使用1个反斜杠。请参阅Scala regex help

  

由于转义不是在多行字符串文字中处理的,因此使用三引号可以避免必须转义反斜杠字符,以便"\\d"可以写"""\d"""。使用某些插值器也可以获得相同的结果,例如raw"\d".r或自定义插值器r"\d"也会编译Regex

所以,使用

val mystring = "test+string"
val tomatch = """test\+string"""
mystring.matches(tomatch)

请参阅Scala demo

否则,在常规(非“原始”)字符串文字中,您需要双反斜杠:

val tomatch = "test\\+string"

如果整个字符串模式应被视为文字字符串,请使用

import scala.util.matching.Regex

然后

val tomatch = Regex.quote("test+string")

Regex.quote将逃脱应该正确转义的所有特殊字符。

Another Scala demo