неожиданные результаты для регулярного выражения Perl - PullRequest
0 голосов
/ 15 июля 2011

Что не так с этим?

echo commons-logging.jar | perl -pe 's/(.*?)([^s]+\.jar)/$1 $2/' 
commons -logging.jar 

Я ожидаю, что $ 2 захватит весь файл commons-logging.jar? Особенно как

echo commons-logging.jar | perl -pe 's/([^s]+\.jar)/$1/' 
commons-logging.jar 

Ответы [ 3 ]

1 голос
/ 15 июля 2011

Первый говорит: «захватите все без жадности до первого символа, который не является« s », и поместите его в $ 1 (следовательно, $ 1 = общий), а затем поместите все после того совпадения, которое заканчивается в« .jar », в $ 2 (следовательно, $ 2 = "-logging.jar").

Вторая форма гласит: «захватить все, начиная с по крайней мере одного или нескольких символов, которые не являются« s »(следовательно, захват начинается с« c »), за которым следует что-то, заканчивающееся на« .jar »(отсюда вы получаете весь "commons-logging.jar" в $ 1)

1 голос
/ 15 июля 2011

[^s]+ соответствует всем символам, которые не являются литералами 's, поэтому лучшее, что вы получите, это -logging.jar

0 голосов
/ 15 июля 2011

У вас есть одно регулярное выражение.«Любое число любого символа (не жадный) , за которым следует хотя бы один символ, за которым не следует s, а затем .jar».

«После» важно, совпадения могутt перекрываются.

попробуйте:

echo commons-logging.jar | perl -pe 's/(.*?)([^s]+\.jar)/$1 $1$2/' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...