Отрицательный взгляд не ведет себя так, как ожидалось - PullRequest
0 голосов
/ 03 сентября 2018

Попытка использовать регулярное выражение для разбора аргументов из строки: "-a 1 -b -5.1".

Вывод должен иметь 2 флага со значениями: флаг a со значением 1, b с -5.1.

Когда я пытаюсь (-(?<flag>[a-zA-Z])(?<value> .+)?(?!-[a-zA-Z]))* регулярное выражение, он возвращает только флаг a со значением 1 -b -5.1.

Почему это не останавливается на -b?

1 Ответ

0 голосов
/ 03 сентября 2018

Вам нужно сделать (?<value> .+) ленивым и превратить отрицательный взгляд в положительный взгляд.

Вот моя попытка:

-(?<flag>[a-zA-Z]) (?<value>.+?)(?=$| -[a-zA-Z])

Демо

Пояснение:

Вы, наверное, удивляетесь, почему вместо негативного используется позитивный взгляд. Это связано с тем, что +? прекращает сопоставление всякий раз, когда вещь соответствует. Вот почему мы смотрим в будущее, чтобы найти $| -[a-zA-Z], и если мы его найдем, +? перестанет совпадать!

Я также переместил символ пробела за пределы группы value. Я полагаю, вы не хотите, чтобы значение содержало пробелы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...