正则表达式 - 匹配除了特定字符串以外的所有内容

3
为了验证我的目的的正则表达式,我会使用Scala控制台: "REGEX".r.findFirstIn("exampleString").isDefinied 我有很多字符串需要匹配正则表达式。只要字符串恰好是“foo”或“bar”,我希望上面的输出为false。
我最接近的是^((?!foo|bar).)*$。然而,问题是一旦它包含"foo"或"bar",所有的东西都变成了false,尽管我想让"foof"为true。
更新:
我需要此正则表达式用于脚本的配置。因此,我不能使用Scala方法或更改正则表达式的处理方式。
3个回答

3

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


谢谢,但我无法更改行为,因为这只是现有脚本的配置。 - emvavra
1
我在答案中添加了另一个正则表达式。 - Rorick

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

def isFooOrBar(s: String) = !s.matches("""foo|bar""") 应该足够了。 - kiritsuku
@sschaef,做得好。已更新。 - dhg
谢谢大家,但我不能改变脚本。我需要用于脚本配置的正则表达式。 - emvavra

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())));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接