3

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

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

我得到的最接近的是^((?!foo|bar).)*$.
但是,问题在于,一旦它包含“foo”或“bar”,一切都是错误的,尽管我希望“fooof”为真。

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

4

3 回答 3

3

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

于 2012-09-04T21:02:59.843 回答
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
于 2012-09-04T21:03:14.417 回答
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())));
}
于 2012-09-05T15:34:02.097 回答