Matches: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
 
(20 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
===Zugehörige Evaluatoren===
*'''MathEvaluator'''
=== Beschreibung ===
=== Beschreibung ===
Die Funktion ''matches'' prüft, ob ein String einem gegebenen regulären Ausdruck genügt. Die Funktion erwartet zwei String, die Zeichenkette, die geprüft werden soll, und den regulärer Ausdruck, der als Grundlage zum Prüfen gilt. Es wird ein Boolean zurückgegeben.
Die Funktion ''matches'' prüft, ob ein String einem gegebenen regulären Ausdruck genügt. Die Funktion erwartet zwei Strings, die Zeichenkette, die geprüft werden soll, und den regulärer Ausdruck, der als Grundlage zum Prüfen gilt. Es wird ein Boolean zurückgegeben.


=== Syntax ===
=== Syntax ===
Zeile 14: Zeile 17:
=== Beispiele ===
=== Beispiele ===
==== Standardfälle ====
==== Standardfälle ====
  matches('Abcd0','[A-Za-z0-9]*')  --> returns true
  matches('Abcd0','[A-Za-z0-9]*')  --> returns ''true''


==== Benutzung von Variablen ====
==== Benutzung von Variablen ====
    matches('abababa','[var=a]')
matches('abababa','[var=a]')
    matches('[var=c]','\\d')
matches('[var=c]','\\d')
matches([input=field1], concat([var=s3a], '|', [var=s3b], '|', [var=s3c]))
 
==== Benutzung von Textfeldern ====
Bei einigen Testfunktionen kann <code>matches</code> als Ersatz dienen, wenn man Textfelder aber keinen Formeleditor nutzt.
 
Im folgenden jeweils ein Beispiel für die Ersetzung der Funktionen mit <code>matches</code>.
 
'''isElementOf''':
'''JACK2:'''
matches('[pos=1]','^(1|2|3)$')
--> [pos=1]=4  --> returns ''false''
--> [pos=1]=2  --> returns ''true''


====JUnit Tests====
'''JACK3:'''
<span class="mw-customtoggle-myDivision">[Anzeigen]</span>
matches([input=field1],'^(1|2|3)$')
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed" id="mw-customcollapsible-myDivision">
--> [input=field1]=4  --> returns ''false''
@BeforeClass
--> [input=field1]=--> returns ''true''
public static void beforeTest() {
fillInVariableMap.put(7, OMConverter.toObject("<OMOBJ><OMSTR>abababa</OMSTR></OMOBJ>"));
fillInVariableMap.put(8, OMConverter.toObject("<OMOBJ><OMI>6</OMI></OMOBJ>"));
fillInVariableMap.put(9, OMConverter.toObject("<OMOBJ><OMI>2</OMI></OMOBJ>"));
exerciseVariableMap.put("g", OMConverter.toObject("<OMOBJ><OMSTR>abababa</OMSTR></OMOBJ>"));
exerciseVariableMap.put("h", OMConverter.toObject("<OMOBJ><OMI>6</OMI></OMOBJ>"));
exerciseVariableMap.put("i", OMConverter.toObject("<OMOBJ><OMI>2</OMI></OMOBJ>"));
}


@Test
public void testMatches1() {
assertTrue(Evaluator.getBooleanResult("matches('abababa','abababa')", exerciseVariableMap, fillInVariableMap));
}


@Test
'''isFraction''':
public void testMatches2() {
'''JACK2:'''
assertTrue(Evaluator.getBooleanResult("matches('abcdefghijklmnopqrstuvwxyz','abcdefghijklmnopqrstuvwxyz')", exerciseVariableMap, fillInVariableMap));
matches('[pos=1]','^-?\d+\/\d+$')
}
--> [pos=1]=12.34  --> returns ''false''
--> [pos=1]=8/9  --> returns ''true''


@Test
'''JACK3:'''
public void testMatches3() {
matches([input=field1],'^-?\d+\/\d+$')
assertTrue(Evaluator.getBooleanResult("matches('5', '[0-6]+')", exerciseVariableMap, fillInVariableMap));
--> [input=field1]=12.34  --> returns ''false''
}
--> [input=field1]=8/9  --> returns ''true''


@Test
public void testMatches4() {
assertTrue(Evaluator.getBooleanResult("matches('Ab3', '[A-Za-z0-9]+')", exerciseVariableMap, fillInVariableMap));
}


@Test
'''isIntegerNumber''':
public void testMatches5() {
'''JACK2:'''
assertTrue(Evaluator.getBooleanResult("matches('2', '\\d')", exerciseVariableMap, fillInVariableMap));
matches('[pos=1]','^-?\d+$')
}
--> [pos=1]=12  --> returns ''true''
--> [pos=1]=2.3  --> returns ''false''


@Test
'''JACK3:'''
public void testMatches6() {
matches([input=field1],'^-?\d+$')
assertTrue(!Evaluator.getBooleanResult("matches('abc', '\\d')", exerciseVariableMap, fillInVariableMap));
--> [input=field1]=12  --> returns ''true''
}
--> [input=field1]=2.3  --> returns ''false''


@Test
public void testMatchesAndInput1() {
assertTrue(Evaluator.getBooleanResult("matches('abababa','[pos=7]')", exerciseVariableMap, fillInVariableMap));
}


@Test
'''isNaturalNumber''':
public void testMatchesAndInput2() {
'''JACK2:'''
assertTrue(Evaluator.getBooleanResult("matches('5','[0-[pos=8]]+')", exerciseVariableMap, fillInVariableMap));
matches('[pos=1]','^\d+$')
}
--> [pos=1]=42  --> returns ''true''
--> [pos=1]=-42  --> returns ''false''


@Test
'''JACK3:'''
public void testMatchesAndInput3() {
matches([input=field1],'^\d+$')
assertTrue(Evaluator.getBooleanResult("matches('[pos=9]', '\\d')", exerciseVariableMap, fillInVariableMap));
--> [input=field1]=42  --> returns ''true''
}
--> [input=field1]=-42  --> returns ''false''


@Test
public void testMatchesWithVariables1() {
assertTrue(Evaluator.getBooleanResult("matches('abababa','[var=g]')", exerciseVariableMap, fillInVariableMap));
}


@Test
'''isNotElementOf''':
public void testMatchesWithVariables2() {
'''JACK2:'''
assertTrue(Evaluator.getBooleanResult("matches('5', '[0-[var=h]]+')", exerciseVariableMap, fillInVariableMap));
matches('[pos=1]','^((?!1|2).)*$')
}
--> [pos=1]=2  --> returns ''false''
--> [pos=1]=4  --> returns ''true''


@Test
'''JACK3:'''
public void testMatchesWithVariables3() {
matches([input=field1],'^((?!1|2).)*$')
assertTrue(Evaluator.getBooleanResult("matches('[var=i]', '\\d')", exerciseVariableMap, fillInVariableMap));
--> [input=field1]=2  --> returns ''false''
}
--> [input=field1]=4  --> returns ''true''


@Test(expected=ParserException.class)
public void testMatchesWithWrongInputCharacter() {
Evaluator.getNumberResult("matches(ab, ab)", exerciseVariableMap, fillInVariableMap);
fail();
}


@Test(expected=FunctionInvalidNumberOfArgumentsException.class)
'''isRationalNumber''':
public void testMatchesWithOneArgument() {
'''JACK2:'''
Evaluator.getNumberResult("matches('abc')", exerciseVariableMap, fillInVariableMap);
matches('[pos=1]','^-?\d+\.\d+$')
fail();
--> [pos=1]=14  --> returns ''false''
}
--> [pos=1]=12.5  --> returns ''true''


@Test(expected=FunctionInvalidNumberOfArgumentsException.class)
'''JACK3:'''
public void testmatchesWithThreeArguments() {
matches([input=field1],'^-?\d+\.\d+$')
Evaluator.getNumberResult("matches('str', '[i]+', 'string')", exerciseVariableMap, fillInVariableMap);
--> [input=field1]=14  --> returns ''false''
fail();
--> [input=field1]=12.5  --> returns ''true''
}


@Test(expected=UndefinedExerciseVariableException.class)
public void testMatchesWithMissingExerciseVariable() {
Evaluator.getNumberResult("matches('[var=j]', '[var=j]')", exerciseVariableMap, fillInVariableMap);
fail();
}


@Test(expected=UndefinedFillInVariableException.class)
'''isRealNumber''':
public void testMatchesWithMissingInput() {
'''JACK2:'''
Evaluator.getNumberResult("matches('[pos=42]', '[pos=42]')", exerciseVariableMap, fillInVariableMap);
matches('[pos=1]','^-?\d+(\.|\/)?\d*$')
fail();
--> [pos=1]=12.7  --> returns ''true''
}
--> [pos=1]=test  --> returns ''false''
</syntaxhighlight>


=== Hinweise ===
'''JACK3:'''
matches([input=field1],'^-?\d+(\.|\/)?\d*$')
--> [input=field1]=12.7  --> returns ''true''
--> [input=field1]=test  --> returns ''false''


[[Kategorie:Evaluatorfunktion]][[Kategorie:Zeichenkettenfunktionen]]
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Testfunktionen]][[Kategorie:Zeichenkettenfunktionen]][[Kategorie:JACK2]][[Kategorie:JACK3]]

Aktuelle Version vom 18. April 2024, 10:33 Uhr

Zugehörige Evaluatoren

  • MathEvaluator

Beschreibung

Die Funktion matches prüft, ob ein String einem gegebenen regulären Ausdruck genügt. Die Funktion erwartet zwei Strings, die Zeichenkette, die geprüft werden soll, und den regulärer Ausdruck, der als Grundlage zum Prüfen gilt. Es wird ein Boolean zurückgegeben.

Syntax

matches(Zeichenkette zeichenkette, Zeichenkette regExp)

Parameter

  • zeichenkette - zu prüfende Zeichenkette
  • regExp - regulärer Ausdruck

Return Value

Beispiele

Standardfälle

matches('Abcd0','[A-Za-z0-9]*')   --> returns true

Benutzung von Variablen

matches('abababa','[var=a]')

matches('[var=c]','\\d')

matches([input=field1], concat([var=s3a], '|', [var=s3b], '|', [var=s3c]))

Benutzung von Textfeldern

Bei einigen Testfunktionen kann matches als Ersatz dienen, wenn man Textfelder aber keinen Formeleditor nutzt.

Im folgenden jeweils ein Beispiel für die Ersetzung der Funktionen mit matches.

isElementOf:

JACK2:
matches('[pos=1]','^(1|2|3)$')
--> [pos=1]=4   --> returns false
--> [pos=1]=2   --> returns true
JACK3:
matches([input=field1],'^(1|2|3)$')
--> [input=field1]=4   --> returns false
--> [input=field1]=2   --> returns true


isFraction:

JACK2:
matches('[pos=1]','^-?\d+\/\d+$')
--> [pos=1]=12.34   --> returns false
--> [pos=1]=8/9   --> returns true
JACK3:
matches([input=field1],'^-?\d+\/\d+$')
--> [input=field1]=12.34   --> returns false
--> [input=field1]=8/9   --> returns true


isIntegerNumber:

JACK2:
matches('[pos=1]','^-?\d+$')
--> [pos=1]=12   --> returns true
--> [pos=1]=2.3   --> returns false
JACK3:
matches([input=field1],'^-?\d+$')
--> [input=field1]=12   --> returns true
--> [input=field1]=2.3   --> returns false


isNaturalNumber:

JACK2:
matches('[pos=1]','^\d+$')
--> [pos=1]=42   --> returns true
--> [pos=1]=-42   --> returns false
JACK3:
matches([input=field1],'^\d+$')
--> [input=field1]=42   --> returns true
--> [input=field1]=-42   --> returns false


isNotElementOf:

JACK2:
matches('[pos=1]','^((?!1|2).)*$')
--> [pos=1]=2   --> returns false
--> [pos=1]=4   --> returns true
JACK3:
matches([input=field1],'^((?!1|2).)*$')
--> [input=field1]=2   --> returns false
--> [input=field1]=4   --> returns true


isRationalNumber:

JACK2:
matches('[pos=1]','^-?\d+\.\d+$')
--> [pos=1]=14   --> returns false
--> [pos=1]=12.5   --> returns true
JACK3:
matches([input=field1],'^-?\d+\.\d+$')
--> [input=field1]=14   --> returns false
--> [input=field1]=12.5   --> returns true


isRealNumber:

JACK2:
matches('[pos=1]','^-?\d+(\.|\/)?\d*$')
--> [pos=1]=12.7   --> returns true
--> [pos=1]=test   --> returns false
JACK3:
matches([input=field1],'^-?\d+(\.|\/)?\d*$')
--> [input=field1]=12.7   --> returns true
--> [input=field1]=test   --> returns false