Heim >Java >javaLernprogramm >Wie teile ich Zeichenfolgen durch Leerzeichen auf und behalte gleichzeitig in Anführungszeichen gesetzte Segmente mithilfe regulärer Ausdrücke bei?

Wie teile ich Zeichenfolgen durch Leerzeichen auf und behalte gleichzeitig in Anführungszeichen gesetzte Segmente mithilfe regulärer Ausdrücke bei?

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 09:54:10346Durchsuche

How to Split Strings by Spaces While Preserving Quoted Segments Using Regular Expressions?

Aufteilen von Zeichenfolgen mit Leerzeichen unter Ausschluss zitierter Segmente

Im Bereich der regulären Ausdrücke die Aufgabe, eine Zeichenfolge in Leerzeichen aufzuteilen und dabei zitierte Segmente beizubehalten kann für unerfahrene Benutzer entmutigend sein. Um dieser Herausforderung zu begegnen, suchen wir nach einer robusten Lösung, die unsere Eingabezeichenfolge genau in ihre Bestandteile aufteilt.

Die bereitgestellte Beispielzeichenfolge stellt einen speziellen Fall dar, in dem Leerzeichen Wörter abgrenzen, jedoch nicht innerhalb von Segmenten in einfache oder doppelte Anführungszeichen. Die gewünschte Ausgabe behält diese in Anführungszeichen gesetzten Segmente bei und stellt sicher, dass Phrasen wie „wird sein“ oder „regulärer Ausdruck“ intakt bleiben.

Ein geeigneter regulärer Ausdruck für diese Aufgabe ist überraschend einfach:

[^\s"']+|"([^"]*)"|'([^']*)'

Aufschlüsselung dieses Ausdrucks:

  • [^s"'] : Entspricht Zeichenfolgen, bei denen es sich nicht um Leerzeichen, Anführungszeichen oder einzelne Zeichen handelt Anführungszeichen.
  • "([^"]*)": Entspricht Zeichenfolgen in doppelten Anführungszeichen und erfasst den Inhalt innerhalb der zweiten Erfassungsgruppe.
  • '([^']*)': Entspricht Zeichenfolgen in einfachen Anführungszeichen, die den Inhalt innerhalb der dritten Erfassungsgruppe erfassen.

Um diesen Ausdruck in Java zu verwenden, können wir Folgendes verwenden Code:

List<String> matchList = new ArrayList<>();
Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    if (regexMatcher.group(1) != null) {
        // Add double-quoted string without the quotes
        matchList.add(regexMatcher.group(1));
    } else if (regexMatcher.group(2) != null) {
        // Add single-quoted string without the quotes
        matchList.add(regexMatcher.group(2));
    } else {
        // Add unquoted word
        matchList.add(regexMatcher.group());
    }
}

Dieser Code durchläuft die Eingabezeichenfolge und erfasst Segmente in Anführungszeichen und ohne Anführungszeichen, was zu einer Liste der geteilten Elemente führt. Alternativ können wir eine einfachere Version verwenden:

List<String> matchList = new ArrayList<>();
Pattern regex = Pattern.compile("[^\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group());
}

Diese vereinfachte Version enthält sowohl zitierte als auch nicht zitierte Elemente in der Liste.

Das obige ist der detaillierte Inhalt vonWie teile ich Zeichenfolgen durch Leerzeichen auf und behalte gleichzeitig in Anführungszeichen gesetzte Segmente mithilfe regulärer Ausdrücke bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn