Mehrzeiligen Text mit regulärem Ausdruck abgleichen
Beim Versuch, mehrzeiligen Text mit Java abzugleichen, kann es bei der Verwendung des Pattern.MULTILINE-Modifikators und zu Problemen kommen der (?m)-Ausdruck. Hier ist ein Beispiel, das den Unterschied erklärt und eine Lösung bietet:
Wir haben den folgenden mehrzeiligen Text:
User Comments: This is \t a\ta \n test \n\n message \n
Muster mit Pattern.MULTILINE-Modifikator:
String pattern1 = "User Comments: (\W)*(\S)*"; Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE); System.out.println(p.matcher(test).find()); // true
Dieses Muster stimmt erfolgreich mit dem Text überein, da der Modifikator Pattern.MULTILINE die Übereinstimmung der ^- und $-Anker am Anfang und ermöglicht Ende jeder Zeile.
Muster mit (?m)-Ausdruck:
String pattern2 = "(?m)User Comments: (\W)*(\S)*"; System.out.println(test.matches(pattern2)); // false
Dieses Muster stimmt nicht überein, da der (?m)-Ausdruck falsch ist. Es sollte (?s) sein, um den DOTALL-Modus zu aktivieren, der es ermöglicht, dass der Punkt (.) mit Zeilenumbruchzeichen übereinstimmt.
Außerdem wird die Methode matches() verwendet, um zu prüfen, ob die gesamte Zeichenfolge mit dem Muster übereinstimmt. In diesem Fall stimmt das Muster nur mit einem Teil der Zeichenfolge überein, daher gibt „matches()“ „false“ zurück.
Lösung:
Um den mehrzeiligen Text mithilfe eines regulären Ausdrucks korrekt abzugleichen , können Sie das folgende Muster mit dem Modifikator Pattern.DOTALL verwenden:
Pattern regex = Pattern.compile("^\s*User Comments:\s+(.*)", Pattern.DOTALL); Matcher regexMatcher = regex.matcher(subjectString); if (regexMatcher.find()) { ResultString = regexMatcher.group(1); }
Dieses Muster erfasst den Text nach „Benutzerkommentare:“ und speichert ihn in ErgebnisString.
Das obige ist der detaillierte Inhalt vonWie kann ich mehrzeiligen Text mit regulären Java-Ausdrücken korrekt zuordnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!