regex - 匹配除某些字符串之外的所有内容

时间:2012-09-04 20:58:51

标签: regex scala

为了验证我的目的的正则表达式,我使用Scala控制台: "REGEX".r.findFirstIn("exampleString").isDefinied

我有很多字符串,我想与正则表达式匹配。
每当String完全是“foo”或“bar”时,我希望上面的内容是假的。

我最接近的是^((?!foo|bar).)*$ 但问题是,一旦它包含“foo”或“bar”,一切都是假的,尽管我希望“foof”是真的。

更新:
我确实需要这个正则表达式来配​​置脚本。所以我不能使用Scala方法或改变正则表达式的处理方式。

3 个答案:

答案 0 :(得分:3)

为什么不允许那些匹配^(foo|bar)$的字符串?如果这不是一个选项,请尝试使用此正则表达式:^(?!^(foo|bar)$).*$

答案 1 :(得分:1)

这个怎么样?

scala> def isFooOrBar(s: String) = !s.matches("""foo|bar""")
isFooOrBar: (s: String)Boolean

scala> isFooOrBar("foo")
res4: Boolean = false

scala> isFooOrBar("bar")
res5: Boolean = false

scala> isFooOrBar("foof")
res6: Boolean = true

答案 2 :(得分:1)

此模式有效^(?!(foo|bar)$)。一个测试例子:

import java.util.regex.Pattern;

object NotRE extends App {
  val p = Pattern.compile("^(?!(foo|bar)$)");

  val test = Seq("foo", "bar", "1foo", "foo1", "2bar", "bar2", "3bar3", "3foo3");

  print(test map ((x: String) => (x, p.matcher(x).find())));
}