2

Я не могу заставить это простое регулярное выражение работать для соответствующих писем:

'\w*(?:\.\w*)*@\w*(?:\.\w*)*\w\{2,5\}'

Это должно работать, как я проверил это с регулярным выражением приятеля, и это работает просто отлично. Я думаю, что есть проблема с необязательным классом символов, но я не уверен.

1 ответ1

1

Вы должны использовать grep с регулярным выражением perl (опция -P ), которое поддерживает такие предположения, как (?: ) :). Также не следует избегать фигурных скобок.

Пытаться:

grep -P '\w*(?:\.\w*)*@\w*(?:\.\w*)*\w{2,5}'

Поскольку выражения perl являются экспериментальной функцией GNU grep, вы можете изменить (?: ) ( ) и пользовательские расширенные выражения ( -E ):

grep -E '\w*(\.\w*)*@\w*(\.\w*)*\w{2,5}'

Некоторые реализации расширенных выражений не поддерживают фигурные скобки { и } . Для переносимости вы можете использовать основные регулярные выражения.

Использовать базовые регулярные выражения escape ( и ) и оставлять также { и } экранированными.

grep '\w*\(\.\w*\)*@\w*\(\.\w*\)*\w\{2,5\}'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .