2014-09-06 2 views
2

Мне нужна помощь в определении инструкции RegEx, чтобы помочь мне правильно совместить интерфейсы на коммутаторе/маршрутизаторе.Сопоставьте только целое слово, которое содержит специальные символы

Пример: Правильные матчи могут быть:

Fa1/0, Gig2/0/2, Fa3/0/33/333, G1/0/0:1, Gi0/0.900 etc. 

Ближайший я был в состоянии получить это:

[fget][a-z]*[0-9]+(?:[\/\.:][0-9]+)+ 

Проблема заключается в том, что также соответствует Fa1/0 часть Fa1/0/ или Fa1/0a который является неправильным и не должен совпадать.

Может ли кто-нибудь мне помочь?

Учитывая строку: Start Fa1/0/1 Gig2/0 Fa1/0/ Ending
Match ONLY: Fa1/0/1 и Gi2/0
Ограничение: Вы не можете использовать: \s или ' ' (синтаксический анализатор, я использую не позволяет)
Модификатор: Корпус установлен нечувствительным ,

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ/EDIT НИЖЕ

Это на самом деле для RegEx синтаксического анализатора, который находится в новом терминале приложения SecureCRT 7.3.

Цель состоит в том, чтобы раскрасить правильный синтаксис в реальном времени, удалив цвет из неправильного синтаксиса.

Вот почему мы не можем зависеть от токенов^и $, потому что вы никогда не можете быть уверены, что слово будет в начале или в конце строки.

Правильно подобранные целые слова будут соответствовать формату: Interface-Type + Number + Sub-interface (необязательно).

Интерфейс Тип: Может быть что угодно от «F» до FastEthernet. Другие префиксы включают «g» в Gigabit, «e» для Ethernet и «t» - десять.

Номер: Это будет следовать шаблону, а затем (повторяется). Пример: 1/2 или 1/2/3 или даже 1/2/3/4/5/6/7/8/10/12 технически будут действительны для этого случая.

Под-интерфейс (необязательно): будет соответствовать формату или. IE: .900 или: 123

Таким образом, более строгие примеры могут быть: F1/0/1.900 Gig2/0 Te1/0/0/1: 23 Слова могут отображаться в любом порядке и смешивать много других слов. IE: «Show Int F1/0/0» или «int Range fa1/0/1 - 24»

+1

Какой язык/инструмент вы используете? Приведите больше примеров строк ввода. –

+0

Вы можете описать следующий возможный символ и поместить то, что вас интересует в группе захвата: '(\ b [efgt] [az] * [0-9] + (?: [/.] [0-9] +) +) (?: | $) ' –

+0

К сожалению, приведенный выше код не будет работать, так как не разрешено использовать \ s не разрешено '' (пробел). – James

ответ

0

Это соответствует всем указанным вами выражениям. Помимо нескольких незначительных изменений, главное - добавить отрицательное выражение в конце.

[FG][a-z]*[0-9](?:[\/\.\:][0-9]+)*(?!\/)