admin / 11.08.2018

Регулярные выражения java

.

24 дек 2012 17:39  

Yakunin_Yura

Как в Java проверить является ли вводимое с командной строки число целым???
24 дек 2012 18:54  

frymock

java.lang.Integer#parseInt()

Если не целое — получишь exception. Пример здесь.


Изменен:24 дек 2012 15:57
24 дек 2012 19:48  

Yakunin_Yura

guroo:

java.lang.Integer#parseInt()

Если не целое — получишь exception. Пример здесь.

Спасибо!

17. Java — Регулярные выражения

Я так и думал, но сомневался.

25 дек 2012 01:23  

royksopp

а если отбросить дробную часть и сравнить с тем, что было?
25 дек 2012 06:15  

rfq

Yakunin_Yura:

guroo:

java.lang.Integer#parseInt()

Если не целое — получишь exception. Пример здесь.

Спасибо! Я так и думал, но сомневался.

А перечитать доку самому сложно было? Пусть другие перечитывают и тебе докладывают?

25 дек 2012 10:31  

loptop

можно попробовать что-нибудь типа
public static boolean isDigit(String digit){ return digit.trim().matches("\\-?[0-9]+"); }
Правда это не будет работать с математической записью чисел, но для большинства случаев подойдет.
Модераторы:frymock
Сейчас эту тему просматривают:Нет
javatalks — Форум Java программистовФорум Java программистовjavatalks.ru / 2006 — {current_year} © javatalks.ru551200true

javatalks.ru

Регулярные выражения

Пакет java.util.regex поддерживает обработку регулярных выражений (regular expression).

Вот, что пишут в Википедии про регулярные выражения:

Регулярные выражения используются некоторыми текстовыми редакторами и утилитами для поиска и подстановки текста. Например, при помощи регулярных выражений можно задать шаблоны, позволяющие:
найти все последовательности символов «кот» в любом контексте, как то: «кот», «котлета», «терракотовый»;
найти отдельно стоящее слово «кот» и заменить его на «кошка»;
найти слово «кот», которому предшествует слово «персидский» или «чеширский»;
убрать из текста все предложения, в которых упоминается слово кот или кошка.

Последнее предложение мне не нравится, кто-нибудь может отредактировать эту страницу?

В Java могут использоваться нестандартные приёмы использования регулярных выражений по синтаксису. Например, во многих языках выражение \\ означает, что ищется символ обратного слеша, который идёт за специальным мета-символом регулярного выражения. В Java придётся использовать для этой цели \\\\. Но таких различий немного.

Пакет содержит два класса — Pattern и Matcher, которые работают вместе. Класс Patern применяется для задания регулярного выражения. Класс Matcher сопоставляет шаблон с последовательностью символов.

Регулярное выражение состоит из обычных символов, наборов символов и групповых символов. Обычные символы используются как есть. Если в шаблоне указать символы «кот», то эти символы и будут искаться в строке.

Символы новой строки, табуляции и др. определяются при помощи стандартных управляющих последовательностей, которые начинаются с обратного слеша (\). Например, символ новой строки можно задать как \n.

Наборы символов заключаются в квадратные скобки. Например, [cat] совпадает с символами c, a, t. Если поставить символ ^ перед набором символов — [^cat], то ищутся совпадения всех символов, кроме c, a, t.

Чтобы задать диапазон символов, используется дефис. Например, диапазон от 1 до 9 можно задать как [1-9].

Символ точки является групповым символом, который совпадает с любым символом вообще.

Также можно задать, сколько раз совпадает выражение.

  • + — совпадает один или более раз
  • * — совпадает нуль или более раз
  • ? — совпадает нуль или один раз
Конструкция Regex Что считается совпадением
Любой символ
Ноль (0) или одно (1)повторение предшествующего
Ноль (0) или более повторений предшествующего
Одно (1) или более повторений предшествующего
Диапазон символов или цифр
Отрицание последующего (то есть, «не что-то«)
Любая цифра (иначе, )
Любой нецифровой символ (иначе, )
Любой символ-разделитель (иначе, )
Любой символ, отличный от разделителей (иначе, )
Любая буква или цифра (иначе, )
Любой знак, отличный от буквы или цифры (иначе, )

Например, выражение -?\\d+ будет искать число, у которого может быть минус (а может и нет).

Выражение c.t позволит найти слова cat, cot, но не cart.

Регулярные выражения встречаются в методах класса String.

Первые два выражения подходят под составленное выражение — либо число с минусом, либо число без знака.

Регулярные выражения в Java, часть 1

Со знаком плюс число не проходит проверку. Чтобы и этот вариант проходил, нужно видоизменить выражение (четвёртый вариант).

Нужно включить условие «может начинаться с + или -» с помощью вертикальной черты | (ИЛИ). Круглые скобки используются для группировки. Знак вопроса позволяет указать, что допустимо отсутствие знака. Знак плюса экранируется, так как является мета-символом.

Если вы зададите неверное выражение, то будет создано исключение PatternSyntaxException.

Реклама

Статья проплачена кошками — всемирно известными производителями котят.

Если статья вам понравилась, то можете поддержать проект.

Справочник по java

Регулярные выражения

Для работы с регулярными выражениями определено два класса:

Ниже приведен пример использования этих классов. Вначале создается шаблон регулярного выражения описывающего комментарии C++.

Java 8 регулярные выражения

Затем создается движок на основе этого шаблона и строки разбора.

класс Pattern

Установка флагов шаблона регулярного выражения влияет на поведение разбора строки. Флаги указываются при создании объекта Pattern или в самом шаблоне с помощью модификаторов регулярных выражений.

  • CANON_EQ — каноническое равенство;
  • CASE_INSENSITIVE — игнорирование регистра символов;
  • COMMENTS — режим игнорирования пробелов с разрешением однострочных комментариев в шаблоне с символа #;
  • DOTALL — подразумевать ли под точкой символ новой строки (по умолчанию нет);
  • LITERAL — представлять шаблон как обычную строку, т.е. игнорировать значения спец. символов регулярных выражений как +;
  • MULTILINE — многострочный режим;
  • UNICODE_CASE — регстр букв с учетом юникода;
  • UNIX_LINES — режим юниксовых строк, т.е. разделителем строк является только символ Rn.

Методы класса:

  • compile(String regex) — статический метод, возвращающий объект типа Pattern с указанным шаблоном регулярного выражения;
  • compile(String regex, int flags) — в дополнение предыдущему методы, позволяет указать флаги;
  • flags() — возвращает значения флагов;
  • matcher(CharSequence input) — возвращает объект типа Matcher, для разбора указанной строки;
  • matches(String regex, CharSequence input) — статический метод определяющий, соответствует ли строка input шаблону regex;
  • String pattern() — возвращает шаблон регулярного выражения в виде строки;
  • split(CharSequence input) — разбивает указанную строку на массив строк, в качестве разделителя используется шаблон;
  • split(CharSequence input, int limit) — аналогично предыдущему, но с указанием максимального размера массива.

класс Matcher

Некоторые методы класса:

  • reset() — сбрасывает состояние на начало;
  • reset(CharSequence input) — сбросить состояние и указать новую исходную строку разбора;
  • lookingAt() — просматривает, соответствует ли начало текущего региона шаблону;
  • matches() — проверяет, соответствует ли весь текущий регион шаблону;
  • find() — проверяет, есть ли дальше последовательность символов соответствующая шаблону.

    Таким образом, чтобы найти третье вхождение шаблона в строке, надо вызвать метод три раза;

  • find(int start) — аналогично предыдущему, но поиск начинается с указанной позиции;
  • region(int start, int end) — устанавливает границы просмотра в исходной строке;
  • regionEnd() — возвращает индекс конца региона;
  • regionStart() — возвращает индекс начала региона;
  • toMatchResult() — возвращает состояние соответствие как объект с интерфейсом MatchResult;
  • replaceAll(String replacement) — заменяет все вхождения шаблона указанной строкой;
  • replaceFirst(String replacement) — заменяет первое вхождение шаблона указанной строкой;
  • usePattern(Pattern newPattern) — устанавливает новый шаблон регулярного выражения;
  • pattern() — возвращает используемый шаблон;
  • hitEnd() — указывает был ли достигнут конец ввода при последней операции;

Класс также реализует интерфейс MatchResult для для получения информации о последнем найденном соответствии:

  • groupCount() — возвращает число груп в текущем шаблоне;
  • group() — возвращает значение соответствия последней операции поиска соответствия (т.е. вызовов методов lookingAt, matches, find);
  • group(int group) — возвращает значение соответствия конкретной группы последней операции;
  • end() — смещение следующего символа за последним символом найденного соответствия;
  • end(int group) — смещение следующего символа за последним символом найденного соответствия в указанной группе;
  • start() — индекс первого символа найденного соответствия;
  • start(int group) — индекс первого символа найденного соответствия в указанной группе.

Чтобы посмотреть как работают группы, в блоке try предыдущего примера поместите код

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*