сопоставление регулярных выражений scala IPv6 и извлечение групп - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь сопоставить регулярное выражение ipv6 из строки вроде:

3111105 fe88 :: 777: 2333: e89: 12f3, ff42 :: 9, tcp / 0/0

из которых я хочу извлечь два IPv6-адреса.

У меня есть регулярное выражение, как показано ниже:

(([а-f0-9] {0,4}:) + [а-f0-9] {1,4}), (([а-f0-9] {0,4} :) + [а-f0-9] {1,4}), ([A-Za-Z0-9] +) (. *)

Но я получаю часть первого ip в группе (1) и часть второго ip в группе 4.

Вот что я получаю:

группа (0) - (fe88 :: 777: 2333: e89: 12f3)

группа (1) - (e89:)

группа (2) - (ff42 :: 9)

группа (3) - (:)

группа (4) - (tcp)

группа (5) - (/ 0/0)

Однако ожидается:

группа (0) - (fe88 :: 777: 2333: e89: 12f3)

группа (1) - (ff42 :: 9)

группа (2) - (tcp)

группа (3) - (/ 0/0)

Есть предложения?

1 Ответ

0 голосов
/ 15 мая 2018

Регулярное выражение отсутствовало для необязательного символа, который является ":" для первой части.

Следовательно, следующее регулярное выражение будет правильно собирать группы:

((?: [0-9a-е] {0,4}:) + [0-9a-е] {0,4}) + ((?: [0-9a-е] {0 , 4}:) + [0-9a-е] {0,4}) + ([A-Za-Z0-9] +) (*)

.
...