Что означает ведущая звездочка в расширенных и базовых регулярных выражениях?

Какова семантика * в начале RE? Документировано ( man 7 regex), что для базовых RE это соответствует только * (то есть он превращается в обычный символ), но что происходит с расширенными RE? Из примеров видно, что у него та же семантика ".*", Но я не могу найти никакого источника для этого.

prompt> echo "hello" | grep -E  '*'
hello
prompt> echo "hello" | grep  '*'
prompt> 

3 ответа

Решение

Что касается стандарта, результаты не определены:

*+?{

<asterisk>, <plus-sign>, <question-mark>, а также <left-brace> должны быть особенными, за исключением случаев, когда они используются в выражении в скобках (см. RE выражение в скобках) Любое из следующих применений приводит к неопределенным результатам:

Любая попытка последовательно объяснить, что происходит в этом случае, будет зависеть от реализации. Судя по ответу @kos, они, вероятно, соответствуют пустому регулярному выражению.

Заметить, что echo "hello" | grep -E '*' возвращается hello потому что строка совпадает и grep возвращает всю строку, а не потому что * такой же как .*, Вы должны проверить с -Eo:

% echo "hello" | grep -Eo '*' 
% 

У меня нет источников для резервного копирования этого, но не слишком дикое предположение, основанное на практическом тесте, предполагает, что последовательность кванторов в начале регулярного выражения просто игнорируется:

% echo "*hello" | grep -Eo '*'    
% echo "+hello" | grep -Eo '+'
% echo "?hello" | grep -Eo '?'
% echo "{1}hello" | grep -Eo '{1}'
1}
% echo "***hello" | grep -Eo '***' 
% echo "*+?{1}hello" | grep -Eo '*+?{1}hello'
1}hello

Моя подсказка добавляет возвращаемое значение в начале строки в случае, если возвращаемое значение отличается от 0так что это все совпадения.

grep -E 'regex' показать строки, содержащие соответствующее регулярное выражение, и выделит совпадения красным цветом.

принимая это во внимание, grep -E '*' покажет все строки с нулем или более "(ничего)" в нем.

grep '*' просто покажет линии со звездой в нем.

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