Как просто это регулярное выражение? - PullRequest
0 голосов
/ 08 декабря 2018

Можете ли вы помочь мне упростить следующее регулярное выражение:

(^0x)([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})

Я хочу получить следующие результаты, если строка начинается с 0x, то она соответствует следующему выражению

0x010203040506

должно привести к

- group 1: 01

- group 2: 02

- group 3: 03

- group 4: 04

- group 5: 05

- group 6: 06

если строка не начинается с 0x, совпадения быть не должно.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Кроме того, в моих комментариях выше, вы можете рассмотреть возможность использования конструктора (?(DEFINE)...) для проверки и соответствия:

(?x)(?(DEFINE)
    (?<X>[0-9a-f]{2})
)
\A0x(?=(?&X){5})|\G(?!\A)(?&X)

См. живую демонстрацию здесь

0 голосов
/ 08 декабря 2018

Вы можете использовать Подпрограммы RegEx , чтобы избежать использования нескольких классов символов:

\A0x([0-9a-f]{2})((?1))((?1))((?1))((?1))((?1))

Пример

Использование \ G якорь, вы можете пойти еще короче:

\A0x|\G(?!\A)[0-9a-f]{2}

Пример

...