3

私の目的のために正規表現を検証するために、Scala コンソールを次のように使用します。 "REGEX".r.findFirstIn("exampleString").isDefinied

正規表現と一致させたい文字列がたくさんあります。
文字列が正確に「foo」または「bar」である場合は常に、上記を false にする必要があります。

私が得た最も近いものは です^((?!foo|bar).)*$
ただし、これの問題は、「foo」または「bar」のいずれかが含まれるとすべてがfalseになることですが、「foof」をtrueにしたいのですが。

更新:
スクリプトの構成には、この正規表現が必要です。そのため、Scala メソッドを使用したり、正規表現の処理方法を変更したりすることはできません。

4

3 に答える 3

3

一致しない文字列のみを許可しないのはなぜ^(foo|bar)$ですか? これがオプションでない場合は、次の正規表現を試してください: ^(?!^(foo|bar)$).*$.

于 2012-09-04T21:02:59.843 に答える
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 に答える
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 に答える