正規表現を使用して単純なフィルター条件を解析しようとしています
フィルタの構文は次のとおりです。
field=value
field:value
field!=value
field<>value
etc... (you get the idea)
私は次のことを思いついた(scalaで)
val FilterEntry = """^(\w+)(!?)(=|:|<=|>=|<>|<|>)(.*)$""".r
val FilterEntry(v1, v2, v3, v4) = "field!<>value"
v1: String = field
v2: String = !
v3: String = <>
v4: String = value
いいスタートです
ここで、値が渡されないときに正規表現でキャッチ(エラーを発生)させたい
私はこれで試しました(最後のグループをオプションではありませんでした)
val FilterEntry = """^(\w+)(!?)(=|:|<=|>=|<>|<|>)(.+)$""".r
val FilterEntry(v1, v2, v3, v4) = "field!<>"
v1: String = field
v2: String = !
v3: String = <
v4: String = >
したがって、問題は、演算子を「<>」として正しく認識せず、演算子を「<」として認識し、値を「」として認識することです(firest reg expでテストすると、正しく認識されます)演算子を<>として認識し、値を "")として認識します
正規表現に演算子を貪欲に一致させるように指示する必要があると思いますが、デフォルトではそのようになっていると思いました...
- 編集
このscalaコンソールをオンラインで見つけました。正規表現をテストして くださいhttp://www.simplyscala.com/
-