Извлечь подстроку из совпадающей строки - PullRequest
1 голос
/ 31 марта 2019

Я пытаюсь извлечь подстроку из строки после сопоставления для 24 в начале строки. Подстрока - это MAC-идентификатор, начинающийся с позиции 6 до конца строки. Я знаю, что метод подстроки может сделать работу. Мне любопытно знать реализацию регулярных выражений.

Строка = 2410100:80:a3:bf:72:d45

После долгих проб и ошибок этот рег-экс, который у меня есть, кажется мне запутанным.

[^24*$](?<=^\S{6}).*$

Как можно изменить этот reg-ex для соответствия 24, а затем извлечь подстроку из позиции 6 до конца строки?

https://regex101.com/r/vcvfMx/2

Ожидаемые результаты: 00:80:a3:bf:72:d45

1 Ответ

2 голосов
/ 31 марта 2019

Вы можете использовать:

(?<=^24\S{3}).*$

Вот демоверсия: https://regex101.com/r/HqT0RV/1/

Это даст вам ожидаемый результат (т. Е. 00:80:a3:bf:72:d45). Однако это не похоже на действительный MAC-адрес (5 в конце, похоже, не является частью MAC). В этом случае вы должны использовать что-то вроде этого:

(?<=^24\S{3})(?:[0-9a-f]{2}:){5}[0-9a-f]{2}

Демо: https://regex101.com/r/HqT0RV/2

Разбивка:

(?<=            # Start of a positive Lookbehind.
    ^           # Asserts position at the beginning of the string.
    24          # Matches `24` literally.
    \S{3}       # Matches any three non-whitespace characters.
)               # End of the Lookbehind (five characters so far).
(?:             # Start of a non-capturing group.
    [0-9a-f]    # A number between `0` and `9` or a letter between `a` and `f` (at pos. #6).
    {2}         # Matches the previous character class exactly two times.
    :           # Matches `:` literally.
)               # End of the non-capturing group.
{5}             # Matches the previous group exactly five times.
[0-9a-f]        # Any number between `0` and `9` or any letter between `a` and `f`.
{2}             # Matches the previous character class exactly two times.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...