Простое регулярное выражение с повторением поставило меня в тупик - PullRequest
0 голосов
/ 18 декабря 2010

Привет.

Такая простая проблема поставила меня в тупик.Люди здесь очень полезны.

Я пытаюсь сопоставить строку, содержащую фиксированный текст и случайные цифры.

echo blah blah abc123 | grep -o abc
abc

echo blah blah abc123 | grep -o abc[0-9]
abc1

echo blah blah abc123 | grep -o abc[0-9]+

echo blah blah abc123 | grep -o "abc[0-9]+"

echo blah blah abc123 | grep -o "abc[0-9]*"
abc123

echo blah blah abc123 | grep -o abc[0-9]{3}

echo blah blah abc123 | grep -o "abc[0-9]{3}"

Оператор * (соответствует нулю или более раз) - единственныйэто работает, как я и ожидал.

Почему оператор + (соответствует 1 или более раз) не совпадает?

Почему конкретный оператор подсчета повторений {3} не соответствует?

Я запускаю эти примеры в оболочке bash под Ubuntu 10.10, если это имеет значение.

Большое спасибо.

1 Ответ

6 голосов
/ 18 декабря 2010

Они оба работают, когда вы выходите из специальных символов:

$ echo blah blah abc123 | grep -o "abc[0-9]\+"
abc123
$ echo blah blah abc123 | grep -o "abc[0-9]\{3\}"
abc123

Неэкранированный, регулярное выражение ищет литерал + или {, как вы, вероятно, и поняли.

Относительно того, почему вы должны оставить * в стороне, а вам нужно сбежать +, я не уверен.

...