Регулярное выражение не соответствует шаблону

Кто-нибудь может помочь мне понять, почему это регулярное выражение \(\w+[^config]\) соответствует (epam_contractor_net), (ctmain1_soasta_eucap1_coresys), а не (epam_contractor_soasta_web_svc) в приведенной ниже строке?

config term

fw1-ravpn-lab-lon(config)# no object-group service epam_contractor_soasta_web_s$m_contractor_soasta_web_sv                         cno object-group service epam_contractor_soasta_web_$
Removing object-group (epam_contractor_soasta_web_svc) not allowed, it is being used.

fw1-ravpn-lab-lon(config)# no  service-object tcp destination eq www
                                       ^
ERROR: % Invalid input detected at '^' marker.

fw1-ravpn-lab-lon(config)# no object-group network epam_contractor_net
Removing object-group (epam_contractor_net) not allowed, it is being used.

fw1-ravpn-lab-lon(config)# no object-group network ctmain1_soasta_eucap1_coresy$ain1_soasta_eucap1_coresys                         no object-group network ctmain1_soasta_eucap1_cores$
Removing object-group (ctmain1_soasta_eucap1_coresys) not allowed, it is being used.

fw1-ravpn-lab-lon(config)# end

fw1-ravpn-lab-lon# 

Что ж, я бы начал с того, что [^config] означает «ни один из символов c, o, n, f, i или g», что, вероятно, не то, что вы имели в виду.

kindall 10.08.2018 17:15

верный. Я хочу сопоставить config как целое слово

Federico Olivieri 10.08.2018 17:18

Можете ли вы показать код, в котором вы компилируете строку регулярного выражения? Я поместил ваше регулярное выражение в regexr, и оно соответствует всем трем строкам

strava 10.08.2018 17:18
1
3
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

То, что у вас есть, означает один или несколько символов слова \w+, и вы указываете, что самый последний символ не должен быть любым из c, o, n, f, i, or g. Однако последний символ в epam_contractor_soasta_web_svc - это c. Следовательно, он не соответствует этой строке.

Ответ принят как подходящий

Шаблон \(\w+[^config]\) исключает все, что заканчивается любым из символов в config (c, o, n, f, i, g), но не саму строку config. Это означает, что если бы у вас было значение (i_end_in_c), оно также не было бы сопоставлено (потому что оно заканчивается на c). То же самое применимо к (i_end_in_o), (i_end_in_n) и т. д.

По этой же причине не обнаруживается (epam_contractor_soasta_web_svc) - потому что он заканчивается на c.

Вместо этого вы должны использовать отрицательный просмотр вперед:

\((?!config)\w+\)

Вышеупомянутое не будет соответствовать ни одной строке, начинающейся с config.

Другие вопросы по теме