Регулярное выражение для ограничения количества строк в тексте

В этом руководстве по регулярным выражениям Java мы научимся проверять, находятся ли несколько строк входного текста в пределах некоторого минимального и максимального предела, независимо от того, сколько всего символов встречается в строке.

Регулярное выражение для сопоставления количества строк будет зависеть от точных символов или последовательностей символов, используемых в качестве разделителей строк. На практике разделители строк могут различаться в зависимости от соглашения вашей операционной системы, приложения или предпочтений пользователя и т. д. Таким образом, написание идеального решения зависит от того, какие соглашения для указания начала новой строки должны поддерживаться.

Следующее решение, обсуждаемое в этом руководстве, поддерживает стандартные соглашения о переносе строк MS-DOS/Windows(«\r\n»), устаревшие соглашения Mac OS(«\r») и Unix/Linux/BSD/OS X(«\n»).

Регулярное выражение: \\A(?>[^\r\n]*(?>\r\n?|\n)){0,3}[^\r\n]*\\z

1. Объяснение регулярного выражения

 \A # Утверждает позицию в начале строки.(?> # Группировать, но не захватывать и не сохранять позиции возврата:[^\r\n]* # Соответствует нулю или более символов, кроме CR и LF.(?> # Группировать, но не захватывать и не сохранять позиции возврата:\r\n? # Сопоставить CR с необязательным последующим LF(CRLF).| # Или:\n # Соответствует отдельному символу LF.) # Завершить незахватывающую атомарную группу.){0,4} # Конец группы; повторить от нуля до четырех раз.[^\r\n]* # Соответствует нулю или более символов, кроме CR и LF.\z # Утверждает позицию в конце строки.CR: Возврат каретки(\r\n)LF: Перевод строки(\n)

Регулярное выражение выше проверяет, что содержимое имеет минимум ноль строк и максимум 3 строки. Давайте проверим решение регулярного выражения.

2. Демонстрация

2.1. Проверка с нулевыми линиями

StringBuilder builder = new StringBuilder();String regex = "\\A(?>[^\r\n]*(?>\r\n?|\n)){0,3}[^\r\n]*\\z";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(builder.toString());System.out.println(matcher.matches());

Вывод программы:

true

2.2. Подтвердите двумя линиями

StringBuilder builder = new StringBuilder();builder.append("Test Line 1");builder.append("\n");builder.append("Test Line 2");builder.append("\n");String regex = "\\A(?>[^\r\n]*(?>\r\n?|\n)){0,3}[^\r\n]*\\z";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(builder.toString());System.out.println(matcher.matches());

Вывод программы:

true

2.3. Проверка с шестью линиями

StringBuilder builder = new StringBuilder();builder.append("Test Line 1");builder.append("\n");builder.append("Test Line 2");builder.append("\n");builder.append("Test Line 3");builder.append("\n");builder.append("Test Line 4");builder.append("\n");builder.append("Test Line 5");builder.append("\n");builder.append("Test Line 6");builder.append("\n");String regex = "\\A(?>[^\r\n]*(?>\r\n?|\n)){0,3}[^\r\n]*\\z";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(builder.toString());System.out.println(matcher.matches());

Вывод программы:

false

Я советую вам поэкспериментировать с приведенным выше простым регулярным выражением, чтобы попробовать больше вариаций.

Прокрутить вверх