@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
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
x(?=y) - Соответствует 'x' только если за 'x' следует 'y'. Это называется упреждение (источник).

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

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

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

Войти через центр авторизации
Похожие вопросы
AwardWallet Пермь
от 50 000 до 80 000 ₽
Emphasoft Санкт-Петербург
от 150 000 до 300 000 ₽
Kotelov Санкт-Петербург
от 150 000 до 190 000 ₽
10 мая 2021, в 04:00
1400 руб./в час
10 мая 2021, в 03:06
120000 руб./за проект
10 мая 2021, в 03:04
40000 руб./за проект