繁体   English   中英

Scala:如何构造包含变量的正则表达式?

[英]Scala: how to construct a regex including a variable?

我想测试包含我之前定义的变量的regex是否匹配字符串。

比如我想这样做:

val value = "abc"
regex = "[^a-z]".r + value //something like that
if(regex matches ".abc") print("ok, it works")

所以我的问题是: 如何在scala中添加构造包含变量的正则表达式?

("[^a-z]" + value).r 

是你所需要的全部

您必须引用值字符串以防止特殊的正则表达式语法。

scala> val value = "*"
value: String = *

scala> val oops = """[^a-z]""" + value r
oops: scala.util.matching.Regex = [^a-z]*

scala> ".*" match { case oops() => }

scala> ".....*" match { case oops() => }

他们在Scala API中添加了引用:

scala> import util.matching._
import util.matching._

scala> val ok = """[^a-z]""" + Regex.quote(value) r
ok: scala.util.matching.Regex = [^a-z]\Q*\E

scala> ".*" match { case ok() => }

scala> ".....*" match { case ok() => }
scala.MatchError: .....* (of class java.lang.String)
  ... 33 elided

您还可以概括模式并执行其他检查:

scala> val r = """\W(\w+)""".r
r: scala.util.matching.Regex = \W(\w+)

scala> ".abc" match { case r(s) if s == "abc" => }

解析和构建正则表达式本身相对昂贵,因此通常需要使用一般模式进行一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM