Heim > Java > javaLernprogramm > Wie kann ich mit Regex eine Zeichenfolge mithilfe von Leerzeichen aufteilen und dabei Leerzeichen in Anführungszeichen ignorieren?

Wie kann ich mit Regex eine Zeichenfolge mithilfe von Leerzeichen aufteilen und dabei Leerzeichen in Anführungszeichen ignorieren?

Susan Sarandon
Freigeben: 2024-12-16 17:25:15
Original
426 Leute haben es durchsucht

How to Split a String Using Spaces While Ignoring Spaces Within Quotes Using Regex?

Regex zum Aufteilen von Zeichenfolgen mithilfe von Leerzeichen

Bei der Arbeit mit Zeichenfolgen müssen wir diese häufig zur Analyse oder Verarbeitung in einzelne Wörter aufteilen. Leerzeichen innerhalb zitierter Texte (z. B. „Dies ist eine Zeichenfolge“) sollten jedoch nicht als Trennzeichen betrachtet werden. Reguläre Ausdrücke (Regex) bieten eine leistungsstarke Möglichkeit, solch komplexe Aufteilungsaufgaben zu bewältigen.

Frage:

Erstellen Sie einen Regex-Ausdruck, um eine Zeichenfolge mithilfe von Leerzeichen zu teilen, wobei umgebene Leerzeichen außer Acht gelassen werden einzeln oder doppelt Anführungszeichen.

Beispiel:

Eingabe: „Dies ist eine Zeichenfolge, die hervorgehoben wird, wenn Ihr ‚regulärer Ausdruck‘ mit etwas übereinstimmt.“

Gewünscht Ausgabe:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.
Nach dem Login kopieren

Antwort:

Während der bereitgestellte Ausdruck von (?!") nicht korrekt aufgeteilt wird, kann ein umfassender Regex-Ausdruck wie folgt formuliert werden:

Dieser Ausdruck erfasst effektiv zwei Arten von Elementen:

  • Ohne Anführungszeichen Wörter: [^s"'] entspricht Zeichenfolgen ohne Leerzeichen oder Anführungszeichen.
  • Zitierter Text:

    • /"( [^"]*)"/ entspricht Text in doppelten Anführungszeichen, mit Ausnahme von Anführungszeichen.
    • /'([^']*)'/ entspricht in ähnlicher Weise Text in einfachen Anführungszeichen, mit Ausnahme der Anführungszeichen.

Java-Implementierung :

Der folgende Java-Code veranschaulicht, wie dieser Regex zum Teilen angewendet wird string:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexSplitter {

    public static void main(String[] args) {
        String subjectString = "This is a string that \"will be\" highlighted when your 'regular expression' matches something.";

        // Pattern that matches unquoted words, quoted texts, and the capturing groups
        Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
        Matcher regexMatcher = regex.matcher(subjectString);

        // List to store the split words
        List<String> matchList = new ArrayList<>();

        while (regexMatcher.find()) {
            // Check for capturing groups to exclude quotes
            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());
            }
        }

        // Display the split words
        for (String word : matchList) {
            System.out.println(word);
        }
    }
}
Nach dem Login kopieren

Ausgabe:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something
Nach dem Login kopieren

Diese erweiterte Diskussion verdeutlicht das Problem und bietet einen genaueren und umfassenderen Regex-Ausdruck sowie eine detaillierte Java-Implementierung um seine Verwendung zu demonstrieren.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Regex eine Zeichenfolge mithilfe von Leerzeichen aufteilen und dabei Leerzeichen in Anführungszeichen ignorieren?. 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