我想创建一个函数,创建正则表达式匹配输入时给定的任意字符串。例如,当我用123$
提供它时,它应该在字符串的字母结尾处"123$"
而不是123
匹配。
def convert( xs: String ) = (xs map ( x => "\\"+x)).mkString
val text = """ 123 \d+ 567 """
val x = """\d+"""
val p1 = x.r
val p2 = convert(x).r
println( p1.toString )
\d+ // regex to match number
println( ( p1 findAllIn text ).toList )
List(123, 567) // ok, numbers are matched
println( p2.toString )
\\\d\+ // regex to match "backshash d plus"
println( ( p2 findAllIn text ).toList )
List() // nothing matched :(
因此,最后findAllIn
应该在文本中找到\d+
,但事实并非如此。这有什么不对?
答案 0 :(得分:28)
您可以使用Java的Pattern类将字符串转义为正则表达式。见http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#quote%28java.lang.String%29
例如:
scala> Pattern.quote("123$").r.findFirstIn("123$")
res3: Option[String] = Some(123$)
答案 1 :(得分:7)
为了更加关注上面的Harold L'评论,如果您想使用Scala库进行此操作,可以使用:
import scala.util.matching.Regex
Regex.quote("123$").r.findFirstIn("123$")