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.
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:
Zitierter Text:
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); } } }
Ausgabe:
This is a string that will be highlighted when your regular expression matches something
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!