Предисловие
В этой статье будут представлены класс и класс маттера в Java регулярные выражения. Прежде всего, мы должны четко понять, что регулярное выражение, указанное как строка, должно сначала составлено как экземпляр класса шаблона. Поэтому, как лучше понять эти два класса - это то, что должны знать программисты.
Давайте посмотрим на эти две категории:
1. Концепция захвата группы
Группа захвата может быть пронумерована путем вычисления его открытых скобок слева направо, что начинается с 1. Например, в выражении ((a) (b (c))) есть четыре такие группы:
1 ((a) (b (c))) 2 (a) 3 (b (c)) 4 (c)
Групповые нули всегда представляют все выражение. Группы, начиная с (?), Являются ли чистые не капитальные группы, которые не захватывают текст и не рассматриваются против количества комбо.
Вход захвата, связанный с группой, всегда является последующей, которая совпадает с группой совсем недавно. Если группа снова рассчитывается из -за квантования, ее ранее захваченное значение будет сохранено при второй сбое вычисления (если есть). Например, сопоставление строки «aba» с выражением (a (b)?)+ Установит вторую группу на «B». В начале каждого матча все захваченные входы отбрасываются.
2. Подробное объяснение классов рисунка и сопоставления
Регулярные выражения Java реализуются с помощью класса Pattern и Catchter Class в пакете java.util.regex (рекомендуется открыть документ Java API при чтении этой статьи. При введении, какой метод введен, проверьте описание метода в API Java, и эффект будет лучше).
Класс шаблонов используется для создания регулярного выражения, или можно сказать, что для создания соответствующего шаблона. Его конструктор является частным и не может быть создан напрямую, но он может создавать регулярное выражение с помощью простого заводского метода Pattern.complie(String regex)
Пример кода Java:
Шаблон p = pattern.compile ("// w+"); p.pattern (); // return/w+ pattern() Возвращает строковую форму регулярного выражения, которое на самом деле является параметром повторного выбора Pattern.complile(String regex)
1.pattern.split (входной вход)
У шаблона есть метод split(CharSequence input) , который используется для разделения строк и возврата строки []. Я предполагаю, что String.split(String regex) реализована через Pattern.split(CharSequence input) .
Пример кода Java:
Шаблон p = pattern.compile ("// d+"); String [] str = p.split ("Мой QQ IS: 456456 Мой телефон: 0532214 Мой адрес электронной почты: [email protected]");Результат: str [0] = "My QQ IS:" str [1] = "Мой телефон:" str [2] = "Моя электронная почта: [email protected]"
2. Pattern.matcher (regex String, вход Charbequence) - это статический метод, используемый для быстрого соответствия строк. Этот метод подходит для сопоставления только один раз и сопоставление всех строк.
Пример кода Java:
Pattern.matches ("// d+", "2223"); // возвращать true pattern.matches ("// d+", "2223aa"); // возвращать false, все строки должны быть сопоставлены, чтобы вернуть true, вот AA не может совпадать с шаблонами.3.pattern.matcher (входной вход)
После того, как так много сказали, наступила очередь дебюта класса Маттера. Pattern.matcher(CharSequence input) Возвращает объект сочетания.
Метод конструктора класса Matchter также является частным и не может быть создан по желанию. Он может получить только экземпляры этого класса с помощью метода Pattern.matcher(CharSequence input) .
Класс шаблонов может выполнять только некоторые простые операции сопоставления. Чтобы получить более сильные и удобные регулярные операции по сопоставлению, необходимо сотрудничать с шаблоном и сопоставлением. Класс Matchter обеспечивает поддержку группировки для регулярных выражений и многочисленную поддержку соответствующих регулярных выражений.
Пример кода Java:
Шаблон p = pattern.compile ("// d+"); Matchter m = p.matcher ("22BB23"); m.pattern (); // return p, который должен вернуть, какой объект шаблона был создан объектом Matchter.4.matcher.matches ()/matcher.lookingat ()/matcher.find ()
Класс Matchter предоставляет три метода совпадения. Все три метода возвращают логический тип. Вернуть True, когда матч достигнут. Если нет совпадения, он возвращает ложь.
matches() соответствует всей строке и возвращает true, только если вся строка совпадает
Пример кода Java:
Шаблон p = pattern.compile ("// d+"); Matchter m = p.matcher ("22BB23"); m.matches (); // возвращать false, потому что Bb не может быть сопоставлен/d+, что приводит к совпадению всей строки неудачной. Matchter M2 = P.Matcher ("2223"); m2.matches (); // вернуть true, потому что/d+ соответствует всей строке Давайте посмотрим на Pattern.matcher(String regex,CharSequence input) , который эквивалентен следующему коду
Pattern.compile(regex).matcher(input).matches()
lookingAt() соответствует предыдущей строке и возвращает true только в том случае, если соответствующая строка находится спереди.
Пример кода Java:
Шаблон p = pattern.compile ("// d+"); Matchter m = p.matcher ("22BB23"); m.lookingat (); // возвращает true, потому что/d+ соответствует предыдущим 22 -м сочетаниям m2 = p.matcher ("aa2223"); m2.lookingAt (); // возвращать false, потому что/d+ не может соответствовать предыдущему AA find() соответствует строке, и соответствующая строка может быть где угодно.
Пример кода Java:
Шаблон p = pattern.compile ("// d+"); Matchter m = p.matcher ("22BB23"); m.find (); // return true matchter m2 = p.matcher ("aa2223"); m2.find (); // вернуть True Matchter M3 = P.Matcher ("AA2223BB"); m3.find (); // вернуть True Matchter M4 = p.matcher ("aabb"); m4.find (); // вернуть false5.mathcer.start ()/matcher.end ()/matcher.group ()
После использования matches() , lookingAt() и find() для выполнения соответствующих операций вы можете использовать три вышеуказанные методы для получения более подробной информации.
start() Возвращает позицию индекса соответствующей подстроки в строке.
end() возвращает индексную позицию последнего символа соответствующей подстроки в строке.
group() возвращает соответствующую подстроение
Пример кода Java:
Шаблон p = pattern.compile ("// d+"); Matchter m = p.matcher ("aaa2223bb"); m.find (); // match 2223 M.Start (); // return 3 M.End (); // return 7, номер индекса после 2223 M.Group (); // return 2223 Mathcer M2 = M.Matcher ("2223BB"); m.lookingat (); // матч 2223 M.Start (); // return 0, поскольку weekat () может соответствовать предыдущей строке, только при использовании SkeatAt () для совпадения метод start () всегда возвращает 0 M.End (); // return 4 m.group (); // return 2223 Matchter M3 = M.Matcher ("2223BB"); M.Matches (); // Сопоставление всей строки m.start (); // возврат 0, я считаю, что все знают причину m.end (); // Возврат 6, я считаю, что все знают причину, потому что Matches () должен соответствовать всем string m.group (); // возврат 2223bb Сказав так много, я считаю, что все понимают использование вышеупомянутых методов. Мы должны поговорить о том, как регулярная группировка выражения используется в Java.
Существует перегруженный метод для start() , end() и group() Они start(int i) , end(int i) , group(int i) специально для групповых операций. У класса Mathcer также есть groupCount() чтобы вернуть сколько групп.
Пример кода Java:
Шаблон p = pattern.compile ("([az]+) (// d+)"); Matchter m = p.matcher ("aaa2223bb"); M.Find (); // совпадать с AAA2223 M.GroupCount (); // возврат 2, потому что есть 2 группы M.Start (1); // return 0 Возвращает номер индекса первой группы соответствующих подстроков в строке M.Start (2); // возвращает 3 M.End (1); // Возвращает 3 возвращает индексную позицию последнего символа первой группы соответствующих подстроков в строке. M.end (2); // Возвращает 7 м.с. Группа (1); // Возвращает AAA, возвращает первую группу соответствующих подстроков M.Group (2); // return 2223, вернуть второй набор соответствующих подстроков Теперь давайте используем немного более высокого уровня, например, есть часть текста с множеством чисел, и эти числа разделены. Теперь нам нужно вывести все цифры в тексте. Это так просто использовать регулярные операции Java.
Пример кода Java:
Шаблон p = pattern.compile ("// d+"); Matcher M = P.Matcher («Мой QQ IS: 456456 Мой телефон: 0532214 Мое письмо: [email protected]»); while (m.find ()) {System.out.println (m.group ()); }Выход:
456456 0532214 123
Если вы замените while()
while (m.find ()) {System.out.println (m.group ()); System.out.print ("start:"+m.start ()); System.out.println ("end:"+m.end ()); }Затем вывод:
456456 Начало: 6 Конец: 12 0532214 СТАРТ: 19 Конец: 26 123 СТАРТ: 36 Конец: 39
Теперь все должны знать, что после каждой операции сопоставления значения трех методов start() , end() и group() будут изменены и будут изменены в информацию о подстроении подстроения, и их методы перегрузки также будут изменены в соответствующую информацию.
Примечание. Только когда операция сопоставления успешна, вы можете использовать три метода start() , end() и group() , в противном случае java.lang.IllegalStateException будут выбраны, то есть, когда любой из методов matches() , lookingAt() , find() вернуть истин, это может быть использовано.
Суммировать
Выше всего содержание этой статьи. Я надеюсь, что содержание этой статьи поможет вашему обучению или работе. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.