私の最初の(今までの)Scala正規表現とここで苦労しています。与えられた文字列が正規表現と一致するかどうかを確認する必要があります: "animal<[a-zA-Z0-9]+,[a-zA-Z0-9]+>
"。'matches' regexメソッドのスカラと同等ですか?
ので、いくつかの例:
animal<0,sega> => valid
animal<fizz,buzz> => valid
animAl<fizz,buzz> => illegal; animAl contains upper-case (and this is case-sensitive)
animal<fizz,3d> => valid
animal<,3d> => illegal; there needs to be something [a-zA-Z0-9]+ between '<' and ','
animal<fizz,> => illegal; there needs to be something [a-zA-Z0-9]+ between ',' and '>'
animal<fizz,%> => illegal; '%' doesn't match [a-zA-Z0-9]+
etc.
これまでの私の最高の試み:私はレンガの壁にぶつかるよどこ
val animalRegex = "animal<[a-zA-Z0-9]+,[a-zA-Z0-9]+>".r
animalRegex.findFirstIn("animal<fizz,buzz")
は、残念ながら、それはです。 findFirstIn
とanimalRegex
の利用可能な他のすべての明白な方法は、すべてOption[String]
タイプを返します。それは、価値ある
val animalRegex = "animal<[a-zA-Z0-9]+,[a-zA-Z0-9]+>".r
if(animalRegex.matches("animal<fizz,buzz>")) {
val leftOperand : String = getLeftOperandSomehow(...)
val rightOperand : String = getRightOperandSomehow(...)
}
(だから私は、Javaのmatches
方法と同等のものを必要とし、「左オペランド」にアクセスする方法が必要:私はブール値を返します何かを見つけることを期待していたので、のようなものは、最初の[a-zA-Z0-9]+
グループの現在のケースでは "fizz
")、次に右/ 2番目のオペランド( "buzz
")の場合は同様です。私が間違っているアイデアは?
何が含まれます答え。スカラードックは、文字列がパターンにマッチするかどうかを判断するために正規表現が使用されている場合は、マッチする部分を抽出または変換するために正規表現を使用します。慣用名は 'case animalRegex(_ *)=>'です。一致するかどうかだけをチェックし、グループは無視します。 –