Maison >Java >javaDidacticiel >Comment diviser des chaînes par espaces tout en préservant les sections citées à l'aide de Regex ?

Comment diviser des chaînes par espaces tout en préservant les sections citées à l'aide de Regex ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 13:22:15378parcourir

How to Split Strings by Spaces While Preserving Quoted Sections Using Regex?

Diviser des chaînes à l'aide d'espaces lorsqu'elles ne sont pas entourées de guillemets avec Regex

Dans une expression régulière, il est possible de diviser une chaîne à l'aide d'espaces tout en conservant les espaces dans les sections entre guillemets. Voici comment y parvenir :

Pour résoudre le problème dans votre expression originale, (?!"), qui se divise en espaces avant les guillemets, considérez l'expression régulière suivante :

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

Ceci l'expression capture trois modèles :

  1. 1  : correspond à un ou plusieurs caractères autres que des espaces et des guillemets.
  2. "(2*)" : correspond à un chaîne entre guillemets doubles, capturant la chaîne sans guillemets dans le groupe 1.
  3. '(3*)' : correspond à une chaîne entre guillemets simples, capturant la chaîne sans guillemets dans le groupe 2.

Pour diviser la chaîne, vous pouvez utiliser du code Java comme ceci :

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());
    }
}

Ce code crée une liste de chaînes, supprimant les guillemets des mots cités et préservant les espaces à l'intérieur de ceux-ci.


  1. s"'
  2. "
  3. '

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