Регулярное выражение, которое проверяет все сценарии

#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# делает.