Я пытаюсь написать простое регулярное выражение Java, которое соответствует следующей комбинации:
[A-ZÑÁÀÂÉÈÊÍÌÎÓÒÔÚÙÛºª \\-]
L·L
Следующие строки действительны:
Следующие строки недействительны:
Как добавить в список исключение «L·L»?
Нет, это не позволяет номера. Я изменил шаблон несколько минут назад, изначально у него был ^, чтобы разрешить все, кроме этих символов. Я удалил, как только я заметил.
Хорошо, но тогда вам нужно изменить ответ Николаса, заменив точку .
(обычную, а не среднюю) соответствующим классом символов.
Я бы использовал группу захвата с двумя вариантами (разделенными |
). Смотрите демо на Regex101.
^([A-ZÑÁÀÂÉÈÊÍÌÎÓÒÔÚÙÛºª \\-]+|.+L·L.+)$
^ start of the string
( | ) 2 alternatives capturing group
[A-ZÑÁÀÂÉÈÊÍÌÎÓÒÔÚÙÛºª \\-] a defined set of characters
+ ... at least a single character
.+L·L.+ anything between L·L
$ end of the string
Простой тест на Java (обратите внимание на экранирование определенных символов):
var p = Pattern.compile("^([A-ZÑÁÀÂÉÈÊÍÌÎÓÒÔÚÙÛºª \\\\-]+|.+L·L.+)$");
Stream.of("ABCL·LGG", "AALL·", "A·LLL", "·LL")
.forEach(s -> System.out.println(s + " -> " + p.matcher(s).matches()));
ABCL·LGG -> true AALL· -> false A·LLL -> false ·LL -> false
А так просто :), спасибо за уточнение, я написал оба выражения по отдельности, но не понял, как их соединить^( group1 | group2 )$
Я изменил первый шаблон, удалив ^, чтобы вместо этого можно было использовать эти символы, а в моем коде .+L·L.+
на .*L·L*.
, чтобы этот символ также можно было найти в первой или последней позиции. Большое спасибо за помощь, ваш ответ правильный.
нам действительно нужны ^
и $
с matches()
? @maqjav Правильно ли возвращать true для "%%L·L%%"
(поскольку %
не находится в первом условии)?
Если средняя точка (·
) может встречаться не более одного раза, то я думаю, что регулярное выражение должно быть таким:
^[A-ZÑÁÀÂÉÈÊÍÌÎÓÒÔÚÙÛºª \\-]+(?:L·L[A-ZÑÁÀÂÉÈÊÍÌÎÓÒÔÚÙÛºª \\-]+)?$
Это не позволит такие вещи, как 976L·LA
.
Если вы хотите, чтобы входной текст содержал несколько средних точек, каждая из которых была окружена L
s, вы можете просто заменить последнюю ?
на *
из регулярного выражения.
976L·LA
действителен?