Maison > Java > javaDidacticiel > Comment diviser des chaînes par espaces tout en préservant les segments cités à l'aide d'expressions régulières ?

Comment diviser des chaînes par espaces tout en préservant les segments cités à l'aide d'expressions régulières ?

Linda Hamilton
Libérer: 2024-12-30 09:54:10
original
344 Les gens l'ont consulté

How to Split Strings by Spaces While Preserving Quoted Segments Using Regular Expressions?

Diviser des chaînes avec des espaces excluant les segments entre guillemets

Dans le domaine des expressions régulières, la tâche de diviser une chaîne en espaces tout en préservant les segments entre guillemets peut être intimidant pour les utilisateurs novices. Pour relever ce défi, nous recherchons une solution robuste qui sépare avec précision notre chaîne d'entrée en ses éléments constitutifs.

L'exemple de chaîne fourni présente un cas spécifique où des espaces délimitent les mots, mais pas dans des segments entre guillemets simples ou doubles. Le résultat souhaité conserve ces segments cités, garantissant que les expressions telles que « sera » ou « expression régulière » restent intactes.

Une expression régulière appropriée pour cette tâche est étonnamment simple :

[^\s"']+|"([^"]*)"|'([^']*)'
Copier après la connexion

Décomposer cette expression :

  • [^s"'] : correspond à des séquences de caractères qui ne sont pas des espaces, des guillemets ou des simples. guillemets.
  • "([^"]*) : correspond aux chaînes entre guillemets doubles, capturant le contenu dans le deuxième groupe de capture.
  • '([^']*)' : correspond chaînes entre guillemets simples, capturant le contenu dans le troisième groupe de capture.

Pour utiliser cette expression en Java, nous pouvons utiliser ce qui suit code :

List<String> matchList = new ArrayList<>();
Pattern regex = Pattern.compile("[^\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    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());
    }
}
Copier après la connexion

Ce code parcourt la chaîne d'entrée, capturant les segments entre guillemets et sans guillemets, ce qui donne une liste des éléments divisés. Alternativement, nous pouvons utiliser une version plus simple :

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

Cette version simplifiée inclut à la fois des éléments entre guillemets et non cités dans la liste.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal