Cet article décrit le fonctionnement de l'extraction régulière Java de contenu entre parenthèses. Partagez-le pour votre référence, comme suit:
J'ai rencontré une fois un problème dans mon travail, à savoir que je devais extraire le contenu dans chaque support dans une chaîne. J'ai recherché en ligne et j'ai constaté que des expressions régulières peuvent être utilisées pour extraire le contenu entre parenthèses. La mise en œuvre spécifique est la suivante:
Importer java.util.arraylist; import java.util.list; import java.util.regex.matcher; import java.util.regex.pattern; public class ExtractMessage {public static void Main (String [] args) {String msg = "PerformanceManager [1st Bracket] Product [2ND Bracket] <[3rd Bracket]; List <string> list = extractMessageByRegular (msg); for (int i = 0; i <list.size (); i ++) {System.out.println (i + "->" + list.get (i)); }} / ** * Utilisez des expressions régulières pour extraire le contenu entre parenthèses * @param msg * @return * / public static list <string> extractMessageByRegular (String msg) {list <string> list = new ArrayList <string> (); Pattern p = motive.compile ("(// [[^ //]] * //])"); Matcher M = P.Matcher (MSG); while (m.find ()) {list.add (m.group (). substring (1, m.group (). length () - 1)); } Retour List; }}Le résultat de sortie est le suivant:
0 -> le 1er support
1 -> le deuxième support
2 -> le 3ème support
Cela a rapidement terminé le travail de code, mais plus tard, j'ai constaté que si les supports contiennent toujours des supports, l'expression régulière perdra son effet. J'ai dû trouver un moyen de le résoudre moi-même. Après la recherche, j'ai finalement trouvé une solution. La mise en œuvre spécifique est la suivante:
Package com.perry.test; import java.util.arraylist; import java.util.list; import java.util.regex.matcher; import java.util.regex.pattern; public class extractMessage {public static void main (string [] args) {string msg = "performanceager [1st bracket] Product [2nd BrackEt [2nd Brackett Le support contient des supports]] <[3ème support] 79 ~ "; List <string> list = extractMessage (msg); for (int i = 0; i <list.size (); i ++) {System.out.println (i + "->" + list.get (i)); }} / ** * Extraire le contenu dans les supports et ignorer les supports dans les supports * @param msg * @return * / public static list <string> ExtreMessage (String msg) {list <string> list = new ArrayList <string> (); int start = 0; int startFlag = 0; int endFlag = 0; pour (int i = 0; i <msg.length (); i ++) {if (msg.charat (i) == '[') {startFlag ++; if (startFlag == EndFlag + 1) {start = i; }} else if (msg.charat (i) == ']') {EndFlag ++; if (endFlag == startFlag) {list.add (msg.substring (start + 1, i)); }}} liste de retour; }}Le résultat de sortie est le suivant:
0 -> le 1er support
1 -> Le deuxième support [le support contient des supports]
2 -> le 3ème support
L'idée principale est de traverser la chaîne et de marquer les positions de début et de fin des supports. S'il s'agit de la position finale correspondant à la position de début des supports, les dénombrements de la position de début et la position finale sont les mêmes, donc le contenu des supports complets est intercepté.
PS: Voici deux outils d'expression régulière très pratiques pour votre référence:
Tool de test en ligne d'expression régulière JavaScript:
http://tools.vevb.com/regex/javascript
Outil de génération en ligne d'expression régulière:
http://tools.vevb.com/regex/create_reg
Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Java régulière des compétences d'expression", "Structure de données Java et tutoriel d'algorithme", "Java Operation Dom Node Skills", "Java Fichier et Directory Operation Skills Summary" et "Java Cache Operation Skills Skills"
J'espère que cet article sera utile à la programmation Java de tous.