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
Freigeben: 2024-12-30 09:54:10
Original
344 Leute haben es durchsucht

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"']+|"([^"]*)"|'([^']*)'
Nach dem Login kopieren

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());
    }
}
Nach dem Login kopieren

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());
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage