2016-09-13 2 views
4

У меня есть ниже возможных строк, и мне нужно сопоставить определенные символы.Regex - строка соответствия, которая с: и пространством

Возможные строки для соответствия:

dsg.1.2.3.4.5.6.7.5 = STRING: 1234 blah blah blah 

OR 

dsg.1.2.3.4.5.6.7.5 = STRING: "1234 blah blah blah" 

Ниже Regex, что я попробовал. Она работает, но для 1-й строки, Это соответствие с «»

\=\s*STRING\:\s(?=\")\"([^"]*)|([^:]*$) 

Чтобы соответствовать выше возможной строки, я использовал, если условие, которые соответствуют хорошо для dsg.1.2.3.4.5.6.7.5 = STRING: "1234 blah blah blah"

Не тот dsg.1.2.3.4.5.6.7.5 = STRING: 1234 blah blah blah

выходной вопрос после матча: нужен

2. [29-58] ` 1234 blah blah blah` 

выхода:

1. [29-58] `1234 blah blah blah` --> No space 

Пожалуйста, помогите мне в этом вопросе.

+0

Это похоже на выход из 'snmpwalk'. Если вы используете SNMP-запросы, вы действительно должны использовать модуль, например [SNMP.pm] (https://metacpan.org/pod/SNMP) или [Net :: SNMP] (https://metacpan.org/pod/Net :: SNMP). – ThisSuitIsBlackNot

+0

Этот символ '([^"] *) 'всегда будет соответствовать, или/чередование никогда не будет соответствовать. Это утверждение' (? = \ ") \" 'Всегда будет истинным, почему оно есть? Если это не так, ничто не будет соответствовать. Ни один из этих литералов не должен быть экранирован. Почему бы не показать код perl, который вы используете. И 'Нет пространства' =' [^ \ s] ' – sln

ответ

2

В Perl'е (PCRE), вы можете использовать регулярные выражения, используя (?|...) не-захвата группы конструкт:

/=\s*STRING:\s(?|"([^"]*)|([^:]*))/ 

RegEx Demo

(?|...) - Подмаски, объявленные в каждой альтернативы этой конструкции будет начать с того же индекс.

Это регулярное выражение будет соответствовать 1234 blah blah blah в захваченной группе # 1 для обеих строк ввода.

+1

@revo: Спасибо за исправление моя опечатка в ответ. – anubhava

7

Попробуйте это регулярное выражение:

=\s*STRING:\s("?)([^"]*)\1 

Там нет необходимости использовать просмотровый aheads, просто использовать ("?), чтобы соответствовать котировке (если она существует), а затем использовать обратную ссылку, чтобы соответствовать его снова в конце , Строка после STRING будет сохранена в $2.

+0

Спасибо. Но он всегда соответствует двум элементам: – Raja

+0

@Yadheendran Что вы имеете в виду? Какие два элемента? – redneb

+0

Да. Строка хранится в $ 2. – Raja

Смежные вопросы