Dieser Artikel beschreibt den Betrieb der regelmäßigen Extraktion von Inhalten in Klammern. Teilen Sie es für Ihre Referenz wie folgt weiter:
Ich habe einmal auf ein Problem in meiner Arbeit gestoßen, nämlich dass ich den Inhalt in jeder Klammer in einer Saite extrahieren musste. Ich habe online gesucht und festgestellt, dass regelmäßige Ausdrücke verwendet werden können, um den Inhalt in Klammern zu extrahieren. Die spezifische Implementierung ist wie folgt:
Import Java.util.ArrayList; Import Java.util.List; import Java.util.regex.matcher; Import Java.util.regex.PatternNn; List <String> list = extractMessageByregular (msg); für (int i = 0; i <list.size (); i ++) {System.out.println (i+"->"+list.get (i)); }} / ** * Verwenden Sie reguläre Ausdrücke, um den Inhalt in Klammern zu extrahieren Muster p = muster.comPile ("(// [^//]]*//])"); Matcher M = P.Matcher (MSG); while (m.find ()) {list.add (m.group (). substring (1, m.group (). Länge ()-1)); } Rückgabeliste; }}Das Ausgabeergebnis ist wie folgt:
0-> die 1. Klammer
1-> Die zweite Halterung
2-> Die 3. Halterung
Dies schloss die Codearbeit schnell ab, aber später stellte ich fest, dass der reguläre Ausdruck seinen Effekt verliert, wenn die Klammern noch Klammern enthalten. Ich musste einen Weg finden, es selbst zu lösen. Nach der Forschung fand ich schließlich eine Lösung. Die spezifische Implementierung ist wie folgt:
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 = "PerformanceManager[1st bracket] Product[2nd bracket[2nd bracket Enthält Klammern]] <[3. Klammer] 79 ~ "; Liste <String> list = extractMessage (msg); für (int i = 0; i <list.size (); i ++) {System.out.println (i+"->"+list.get (i)); }} / ** * extrahieren Sie den Inhalt in den Klammern und ignorieren Sie die Klammern in den Klammern * @param msg * @return * / public staticlist <string> extractMessage (String msg) {list <string> list = new ArrayList <string> (); int start = 0; int startFlag = 0; int endflag = 0; für (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)); }}} Rückgabeliste; }}Das Ausgabeergebnis ist wie folgt:
0-> die 1. Klammer
1-> Die zweite Halterung [Die Klammer enthält Klammern]
2-> Die 3. Halterung
Die Hauptidee besteht darin, die Saite zu durchqueren und die Anfangs- und Endpositionen der Klammern zu markieren. Wenn es sich um die Endposition handelt, die der Anfangsposition der Klammern entspricht, sind die Anzahl der Startposition und die Endposition gleich, sodass der Inhalt der vollständigen Klammern abgefangen wird.
PS: Hier sind zwei sehr bequeme reguläre Ausdruckswerkzeuge für Ihre Referenz:
JavaScript regulärer Ausdruck Online -Test -Tool:
http://tools.vevb.com/regex/javaScript
Regelmäßiger Ausdruck Online -Generierungstool:
http://tools.vevb.com/regex/create_reg
Für weitere Informationen zu Java -Algorithmen können Leser, die an dieser Website interessiert sind, die Themen "Java Regules Expression Skills", "Java -Datenstruktur und Algorithmus -Tutorial", "Java Operation DOM -Knotenkenntnisse", "Java -Datei- und Verzeichnisbetriebsfähigkeiten" und "Java Operation Fertigkeitsberumei" Summary "-Fertigkeiten" anzeigen "
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.