Maison >Java >javaDidacticiel >Comment diviser des chaînes avec des espaces entre guillemets à l'aide d'expressions régulières ?

Comment diviser des chaînes avec des espaces entre guillemets à l'aide d'expressions régulières ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-18 02:22:14554parcourir

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

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 :

  • Mots non cités : N'importe quelle séquence de caractères ne contenant pas d'espaces ni de guillemets, capturés dans le premier groupe.
  • Chaînes entre guillemets : Séquences entourées de guillemets simples ou doubles, sans guillemets à l'intérieur. Les groupes de capture capturent le texte entre les guillemets, à l'exclusion des guillemets eux-mêmes.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn