Ich muss einen regulären Ausdruck erstellen, der in die Methode Pattern.compile (regex) eingefügt wird; Meine Regex muss Integer (ohne 0 am Anfang der Zahl), eine Folge von Zahlen und Char (A-Za-z) erlauben, aber das Problem ist der dritte Punkt: eine Zeichenfolge, die mit dem Zeichen beginnen und enden muss '' ', muss die Zeichen Backslash (sofern es nicht einen anderen Backslash gibt) und das Zeichen' '' (sofern nicht vor einem Backslash)Regulärer Ausdruck der Methode Pattern.compile()
aber ich verstehe nicht, wie man den zweiten Punkt (ich habe eine Menge Fehler) erfüllt, das ist mein Java-Code:
public static void main(String[] args) {
if (args.length == 0)
throw new IllegalArgumentException();
Matcher matcher = Pattern.compile("([a-zA-Z]+[0-9a-zA-Z_]*)|"
+ "(0(?![0-9])|([1-9]+)([0-9]*))|" //"?!" è una asserzione : " se la condizione tra parentesi è vera non considerare lo zero
+ "([\"]{1}(([\\\\][^\"\\][\\\"])*)[\"]{1})"
+ "|(\\s+)").matcher(args[0]);// \s = [ \t\n\x0B\f\r]
System.out.println("Input: " + args[0]); //println va a capo dopo la stampa
while (matcher.lookingAt()) {
System.out.print("Lexeme '" + matcher.group() + "'"); //non va a capo dopo la stampa
System.out.println(" group " + ExampleLexer.getGroup(matcher));
matcher.region(matcher.end(), matcher.regionEnd());
}
//attenzione: matcher.hitEnd() restituisce true se il matcher arriva in fondo
//all'input anche se l'ultimo match non ha avuto successo, quindi funziona solo
//per espressioni regolari "semplici"
if (matcher.regionStart() == matcher.regionEnd())
System.out.println("All lexems succesfully matched");
else {
System.err.print("Unmatched lexem ");
matcher.usePattern(Pattern.compile(".*"));
matcher.lookingAt();
System.err.println(matcher.group());
}
}
Der zweite Punkt ist "_, eine Folge von Zahlen _"? '\ d +'? Bitte geben Sie eine [MCVE] an. Eine Aufzählung für jede Anforderung wäre besser lesbar. Und natürlich haben Sie viele Fehler, erwähnen aber nicht welche. Wenn dies zu komplex ist, um besser zu erklären, dass dies zumindest ein Beispiel hinzufügen (Eingabe/Ausgabe) – AxelH
danke für die Frage :) mein Problem ist der dritte Punkt! jeder String wie folgt: "\\ Hallo \" "muss \ Hallo werden", aber ich weiß nicht, wie es geht! ich meine den Backslash und die "must werden verboten, aber \\ und \" müssen einverstanden sein. – Shinon
der Fehler ist: Ausnahme im Thread "main" java.util.regex.PatternSyntaxException: Unmatched Closing ')' in der Nähe von Index 89 ([a-zA-Z] + [0-9a-zA-Z _] *) | (0 (?! [0-9]) | ([1-9] +) ([0-9] *)) | (["] {1} ([(\ (? = \ | \"))] [^ \ "]) *) ["] {1}) | (\ s +) ^ \t bei java.util. regex.Pattern.error (Unbekannte Quelle) \t bei java.util.regex.Pattern.compile (Unbekannte Quelle) \t bei java.util.regex.Pattern. (Unknown Source) \t bei java.util.regex.Pattern.compile (Unknown Source) \t bei lab05_12_04.ExampleLexer.main (ExampleLexer.java:18) –
Shinon