Heim >Java >javaLernprogramm >Wie teile ich Zeichenfolgen mit Leerzeichen in Anführungszeichen mithilfe regulärer Ausdrücke?

Wie teile ich Zeichenfolgen mit Leerzeichen in Anführungszeichen mithilfe regulärer Ausdrücke?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 02:22:14563Durchsuche

How to Split Strings with Spaces Inside Quotes Using Regular Expressions?

Regex zum Aufteilen von Zeichenfolgen: Leerzeichen in Anführungszeichen ignorieren

Das Identifizieren von Leerzeichen für die Zeichenfolgenaufteilung kann schwierig sein, wenn diese Leerzeichen in Einfach- oder Doppelzeichen eingeschlossen sind Zitate. Um dies zu beheben, betrachten Sie den folgenden regulären Ausdruck:

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

Dieser Ausdruck trennt die Zeichenfolge in zwei Arten von Mustern:

  • Wörter ohne Anführungszeichen:Beliebige Sequenz von Zeichen, die keine Leerzeichen oder Anführungszeichen enthalten, erfasst in der ersten Gruppe.
  • Zeichenfolgen in Anführungszeichen: In einfache oder doppelte Anführungszeichen eingeschlossene Sequenzen, die keine Anführungszeichen enthalten. Die Erfassungsgruppen erfassen den Text innerhalb der Anführungszeichen, mit Ausnahme der Anführungszeichen selbst.

Java-Implementierung:

Der folgende Java-Code verwendet diesen regulären Ausdruck, um die zu teilen string:

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

Einfacher Option:

Wenn die Beibehaltung von Anführungszeichen in der zurückgegebenen Liste akzeptabel ist, ist eine einfachere Version des Codes möglich:

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

Dieser Ansatz ist weniger komplex, enthält aber Anführungszeichen in der zurückgegebenen Liste Elemente auflisten.

Das obige ist der detaillierte Inhalt vonWie teile ich Zeichenfolgen mit Leerzeichen in Anführungszeichen mithilfe regulärer Ausdrücke?. 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