#java #regex
#java #регулярное выражение
Вопрос:
Я нахожусь в процессе написания регулярного выражения на java, которое соответствует приведенным ниже материалам и не соответствует недопустимым строкам. Я не могу правильно отфильтровать его, чтобы оно соответствовало только допустимому списку, а не недействительному.
вот мое регулярное выражение — (?!!)([()XSAa\# -s.!]) )
допустимые строки —
«A \#A\#A\#»,» ###»,»(\#\#\#) \#\#\#-\#\#\#\#»,»###.###.####»,»!##»,» X-####»,» #####- SSSS», «Ааааа!!»`
Здесь оно не соответствует !\#\#
, поскольку я заявил, что оно не должно содержать !
Недопустимые входные данные — !A!\#!A!\#!A!\#, !X, A#A#A#, !a!a!a!a!a
но, к сожалению, оно соответствует A#A#A#
сценарию сбоя.
Кто-нибудь может мне помочь с этим?
Комментарии:
1. попробуйте это на Regex101
2. Можете ли вы объяснить, почему
A#A#A#
оно еще не должно быть сопоставленоA\#A\#A\#
должно? И должны ли совпадать!##
иAaaaa!!
, когда вы говорите, что заявили, что «это» не должно содержать восклицательных знаков?3. Ваше регулярное выражение кажется неправильным, так как в конце есть лишнее
)
, которое не сбалансировано. Также использование-
в наборе символов неверно и выдает ошибку. Вам нужно убедиться,-
что если используется в наборе символов, то в нем должен быть либо первый, либо последний символ. Кроме того, согласно вашему регулярному выражению, вы, похоже, отбрасываете строки, начинающиеся с!
символа. Можете ли вы логически определить, что означает ваше регулярное выражение? Какими должны быть допустимые и недопустимые строки?4. @Aaron — они имеют в виду, что оно не должно начинаться с восклицания, не должно его содержать.
5. @PeterWestlake
!##
также начинается с восклицательного знака и является частью допустимых примеров
Ответ №1:
В конце этого комментария есть непревзойденная скобка, но в остальном это просто отрицательный прогноз (поэтому он не начинается с «!»), за которым следует любое количество символов в классе character . Они включают «A» и «#», поэтому будут приняты любые последовательности этих символов. Я не знаю, чему вы действительно хотите соответствовать, но это объяснение того, почему # A #A# делает.