スカラーのマッチを使用して数学演算を照合しようとしています。だから、この関数は「5 + 2」または「LOG10」など任意の文字列にマッチさせることができるようになります「10^5」などしかし試合は表現が正規表現を使用してスカラーでの数学演算を一致させる
def isValid(expression:String):Boolean={
val number = """((\-|\+)?[0-9]+\.?[0-9])*"""
val operation = """([\+,\-,*,/,C,P])"""
val functions = """(log|ln|sin|cos|tan|arc sin|arc cos|arc tan|sec|csc|cot)"""
val powers = """\^"""+number
val arithmeticExpression = (number + operation + number).r
val functionExpression = (functions + number).r
val powerOperation = (number + powers).r
val stringToTest: Regex = ("""(""" +arithmeticExpression+"""|"""+functionExpression+"""|"""+powerOperation+""")""").r
expression match {
case arithmeticExpression(s) => true
case functionExpression(s) => true
case powerOperation(s)=>true
case _ => false
}
}
println(isValid("1+4").toString)
私が一致した場合の個々のタイプのために失敗し続けあなたは正しく数値をやっていない
def isValid(expression:String):Boolean={
val number = """(\-|\+)?[0-9]+\.?[0-9]*"""
val operation = """[\+,\-,*,/,C,P]"""
val functions = """(log|ln|sin|cos|tan|arc sin|arc cos|arc tan|sec|csc|cot)"""
val power = """\^"""+number
val arithmeticExpression = number+operation+number
val functionExpression = functions+number
val powerExpression = number+power
val validExpression = """(""" +arithmeticExpression+"""|"""+functionExpression+"""|"""+powerExpression+""")"""
validExpression.r.findFirstIn(expression) match {
case Some(`expression`) => true
case None => false
}
正規表現を試してみるためのウェブサイトがあります。これは、見て作成するのに苦労します。 REPLに読み込んで正規表現などを取り除くためのライブラリがあればいいでしょう。興味のないグループを無視するには 'case r(_ *)=>'を使います。 –
括弧が式を混乱させました。ありがとう! – Dguye