Maison >Java >javaDidacticiel >Comment diviser des chaînes avec des espaces entre guillemets à l'aide d'expressions régulières ?
Regex pour le fractionnement de chaînes : ignorer les espaces entre guillemets
Identifier les espaces pour le fractionnement de chaînes peut être difficile lorsque ces espaces sont enfermés dans un simple ou un double citations. Pour résoudre ce problème, considérons l'expression régulière suivante :
[^\s"']+|\"([^\"]*)"|'([^']*)'
Cette expression sépare la chaîne en deux types de modèles :
Implémentation Java :
Le code Java suivant utilise cette expression régulière pour diviser le chaîne :
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 } }
Option plus simple :
Si vous maintenez les guillemets dans la liste renvoyée sont acceptables, une version plus simple du code est possible :
List<String> matchList = new ArrayList<>(); Pattern regex = Pattern.compile("[^\s\"']+|\"[^\"]*\"|'[^']*'"); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { matchList.add(regexMatcher.group()); }
Cette approche est moins complexe mais inclut des guillemets dans les éléments de la liste renvoyés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!