Проблемы с тем, чтобы регулярное выражение было более читабельным, чем его литерал.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблемы с тем, чтобы регулярное выражение было более читабельным, чем его литерал.

Сообщение Anonymous »

Следующее регулярное выражение было проверено на регулярном выражении 101 и работает нормально, сопоставляя либо "()", либо "[]" или "{}":

Код: Выделить всё

\(\)|\[]|\{}
Однако:
  • это не так читабельно
  • в Java становится еще менее читаемым:

    Код: Выделить всё

    \\(\\)|\\[]|\\{}
    
    но все равно работает нормально, как показывает мой тестовый класс.
Теперь Я хотел бы сделать его более читабельным, используя Unicode (который должен избегать экранирования) и константы, определяя его следующим образом:

Код: Выделить всё

private static final String MATCH_OPENING_BRACE = "\u0028";
private static final String MATCH_CLOSING_BRACE = "\u0029";

private static final String MATCH_OPENING_SQUARE_BRACE = "\u005B";
private static final String MATCH_CLOSING_SQUARE_BRACE = "\u005D";

private static final String MATCH_OPENING_CURLY_BRACE = "\u007B";
private static final String MATCH_CLOSING_CURLY_BRACE = "\u007D";

private static final String MATCHING_OR_FLAG = "|";

private static final String COMPLETE_REGEX =
MATCH_OPENING_BRACE + MATCH_CLOSING_BRACE
+ MATCHING_OR_FLAG + MATCH_OPENING_SQUARE_BRACE + MATCH_CLOSING_SQUARE_BRACE
+ MATCHING_OR_FLAG + MATCH_OPENING_CURLY_BRACE + MATCH_CLOSING_CURLY_BRACE;

private static final String REGEX_REPLACEMENT = "";
чтобы я мог написать такой читаемый код:

Код: Выделить всё

@Override
public boolean isValid(String input) {

for (int i = input.length() / 2; i > 0; i--)
input = input.replaceAll(COMPLETE_REGEX, REGEX_REPLACEMENT);

return input.isEmpty();
}
вместо использования этого нечитаемого литерала, например:

Код: Выделить всё

@Override
public boolean isValid(String input) {

for (int i = input.length() / 2; i > 0; i--)
input = input.replaceAll("\\(\\)|\\[]|\\{}", "");

return input.isEmpty();
}
Но здесь выдается следующее исключение:

Код: Выделить всё

java.util.regex.PatternSyntaxException: Unclosed character class near index 7
()|[]|{}
^
Я попробовал добавить escape-символ, вот так:

Код: Выделить всё

private static final String MATCH_OPENING_CURLY_BRACE = "\\\u007B";
но это всего лишь аналогичное исключение:

Код: Выделить всё

java.util.regex.PatternSyntaxException: Unclosed character class near index 8
()|[]|\{}
^
Есть подсказки?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ts-literal
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»