Я пытаюсь написать простое регулярное выражение 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.
Если вы хотите, чтобы входной текст содержал несколько средних точек, каждая из которых была окружена Ls, вы можете просто заменить последнюю ? на * из регулярного выражения.
Демо
976L·LA действителен?