Ah ja danke. Hab ich übersehen. Das mit dem Zeilenanfang erzwingt doch, dass es auch dort beginnt oder? Weil in meinem Fall kann das irgendwo in einer Zeile stehen.
Gleich noch eine Frage hintendran. Kann man irgendwie einstellen, dass er das längste Match nimmt, was er findet?
Bislang matched er bei meinem Pattern für Gleitkommaliterale anstatt
0.5f32 nur
0.5f.
Aktuelles Pattern dafür:
@"(\+|-)?(0|[1-9][0-9]*)[.][0-9]+(f|f32|f64|f128)?"
Ok bei Dezimalzahlen matched er das längste Vorkommen, daher ist wohl am Pattern was falsch.
Mit folgendem Pattern geht es nun:
@"(\+|-)?(0|[1-9][0-9]*)[.][0-9]+(f(32|64|128)?)?"
Ich frage mich nur wieso das obere nicht funktioniert. Liegt es an der Oder-Verknüpfung mit | ?
Ein ähnliches Problem habe ich mit den Suffixkombinationen für dezimale Literale:
@"(\+|-)?(0|[1-9]([0-9]){0,19})((d|du|ds|u|s)(8|16|32|64)?)?"
Hier wird zwar gematched sofern ich nur d, nur u oder nur s als Suffix nutze (die Zahlensuffixe gehen dann auch). Wenn ich aber die Kombinationen du oder ds verwende matched es nicht mehr (bzw. nur bis zum d). Bei oktalen Literalen wie im Folgenden gezeigt funktioniert es hingegen, da der Suffix o dort Pflicht ist und ich deshalb ein etwas anderes Pattern nutze:
@"(([1-7]([0-7]){0,20})|(1([0-7]){1,21})|0)o(u|s)?(8|16|32|64)?"
Beispiele zur Veranschaulichung:
Code: Alles auswählen
// Dezimalliterale
123ds64 // 123 als vorzeichenbehafteter 64Bit Dezimalwert
5u8 // 5 als vorzeichenloser 8Bit Dezimalwert
0d // 0 als Dezimalwert
17u // 17 als vorzeichenloser Dezimalwert
500 // 500 als Dezimalwert
// Oktalliterale
17ou32 // 17 als vorzeichenloser 32Bit Oktalwert
1337o16 // 1337 als 16Bit Oktalwert
0o // 0 als Oktalwert
// aber nicht 17u da das Suffix o Pflicht ist, 17u würde als Dezimalliteral identifiziert werden
Ohne Input kein Output.