Regex pour diviser des chaînes à l'aide d'espaces
Lorsque nous travaillons avec des chaînes, nous devons souvent les diviser en mots individuels à des fins d'analyse ou de traitement. Cependant, les espaces dans les textes cités (par exemple « Ceci est une chaîne ») ne doivent pas être considérés comme des séparateurs. Les expressions régulières (Regex) offrent un moyen puissant de gérer des tâches de fractionnement aussi complexes.
Question :
Créez une expression Regex pour diviser une chaîne à l'aide d'espaces, sans tenir compte des espaces entourés. en simple ou double guillemets.
Exemple :
Entrée : "Il s'agit d'une chaîne qui "sera" mise en surbrillance lorsque votre "expression régulière" correspond à quelque chose."
Désiré Sortie :
This is a string that will be highlighted when your regular expression matches something.
Réponse :
Bien que l'expression fournie de (?!") ne se divise pas correctement, une expression Regex complète peut être formulée comme suit :
Cette expression capture effectivement deux types d'éléments :
Texte cité :
Implémentation Java :
Le code Java suivant illustre comment appliquer cette Regex pour diviser le 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); } } }
Sortie :
This is a string that will be highlighted when your regular expression matches something
Cette discussion améliorée clarifie le problème et fournit une expression Regex plus précise et complète, ainsi qu'une implémentation Java détaillée pour démontrer son utilisation.
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!