Задать вопрос
@n199a
Java

Вопрос по регулярному выражению с условием «любой символ кроме» в Java?

Почему регулярное выражение не выполняется так как задумано?
Исходная строка:
String source = "-1 - -2233 -3- -4";

Регулярное выражение:
String NUMBER_INT_SEPARATOR = "[^-(?=\\d)]";

Разделение строки по регулярному выражению будет осуществляться с помощью метода split() объекта String.
Для справки

Метод split() разбивает строку вокруг совпадений с заданным регулярным выражением.


Разбор регулярного выражения пошагово:
  • [^] - любой символ(-ы) кроме того, который будет находиться в квадратных скобках.
  • [^-] - любые символы, кроме знака тире (-).
  • x(?=y) - Соответствует 'x' только если за 'x' следует 'y'. Это называется упреждение (источник).
  • [^-(?=\\d)] - любые символы, кроме знака тире за которым следует числовой символ


Тогда вопрос: почему данное регулярное выражение захватывает и одиночно стоящий символ тире?

На выходе получаем:
-1
-
-2233
-3-
-4
  • Вопрос задан
  • 374 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
x(?=y) - Соответствует 'x' только если за 'x' следует 'y'. Это называется упреждение (источник).

Это если бы эта конструкция была отдельностоящая. Но она у вас заключена в [], а значит

[^] - любой символ(-ы) кроме того, который будет находиться в квадратных скобках, то есть все символы, кроме -, (, ?, \, d, )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы