В этой статье описывается работа Java регулярной добычи контента в скобках. Поделитесь этим для вашей ссылки, следующим образом:
Однажды я столкнулся с проблемой в своей работе, которая должна была извлечь контент в каждом кронштейне в строке. Я искал онлайн и обнаружил, что регулярные выражения могут быть использованы для извлечения контента в скобки. Конкретная реализация заключается в следующем:
Импорт java.util.arraylist; import java.util.list; import java.util.regex.matcher; import java.util.regex.pattern; открытый класс ExtractMessage {public Static void main (string [] args) {String msg = "PerformanceManager [1st Bracket] Product [2nd Bracket] {3 -й. List <string> list = ExtractMessAgeByRegular (MSG); for (int i = 0; i <list.size (); i ++) {System.out.println (i+"->"+list.get (i)); }} / ** * Используйте регулярные выражения для извлечения контента в скобки * @param msg * @return * / public static <string> extractmessagebyregular (String msg) {list <string> list = new ArrayList <string> (); Шаблон p = pattern.compile ("(// [[^//]]*//])"); Matchter M = P.Matcher (MSG); while (m.find ()) {list.add (m.group (). substring (1, m.group (). length ()-1)); } return List; }}Результат вывода заключается в следующем:
0-> 1-й кронштейн
1-> Второй кронштейн
2-> 3-й кронштейн
Это быстро завершило работу кода, но позже я обнаружил, что если в скобках все еще содержатся кронштейны, регулярное выражение потеряет его эффект. Я должен был найти способ решить это сам. После исследования я наконец нашел решение. Конкретная реализация заключается в следующем:
Пакет com.perry.test; import java.util.arraylist; import java.util.list; import java.util.regex.matcher; import java.util.regex.pattern; открытый класс Extractmessage {public static void main (string [] args) {String msg = "Performancemanage {public void main (String [] args) {String Msg =" содержит кронштейны]] <[3 -й кронштейн] 79 ~ "; List <string> list = ExtractMessage (MSG); for (int i = 0; i <list.size (); i ++) {System.out.println (i+"->"+list.get (i)); }} / ** * Извлеките контент в скобки и игнорируйте кронштейны в кронштейнах * @param msg * @return * / public static <string> extractmessage (string msg) {list> list = new ArrayList <string> (); int start = 0; int startflag = 0; int endflag = 0; for (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)); }}} return List; }}Результат вывода заключается в следующем:
0-> 1-й кронштейн
1-> Второй кронштейн [кронштейн содержит кронштейны]
2-> 3-й кронштейн
Основная идея состоит в том, чтобы пересечь строку и отметить начальные и конечные позиции кронштейнов. Если это конечная позиция, соответствующая начальному положению кронштейнов, количество начальной позиции и конечной позиции одинаковы, поэтому содержание полных кронштейнов перехватывается.
PS: Вот два очень удобных инструмента регулярного выражения для вашей ссылки:
JavaScript регулярное выражение онлайн -тестирование:
http://tools.vevb.com/regex/javascript
Инструмент онлайн -генерации регулярного выражения:
http://tools.vevb.com/regex/create_reg
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть эти темы: «Навыки регулярного выражения Java», «Учебное пособие по структуре данных Java и учебник по алгоритму», «Навыки навыки операции Java DOM Node», «Сводка навыков операции Java Cacch».
Я надеюсь, что эта статья будет полезна для всех Java Programming.