Разница в выражении BSD с выражением GNU

Кто-нибудь знает почему

expr "4" : '-\?[0-9]\+$' 

возвращает 0 в Mac OS X и 1 в Linux?

Факт: Mac использует BSD expr Linux использует GNU

Извините, я изначально набрал

expr "4" : '-\?[0-9]+$'

1 ответ

Решение

expr принимает основное регулярное выражение, а не расширенное регулярное выражение. (См. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html для определения каждого.)

Основные регулярные выражения не поддерживают ? а также + операторы; вам нужно использовать границы вместо.

  • ? реализуется с \{0,1\} (От 0 до 1 случаев)
  • + реализуется с \{1,\} (1 или более случаев)

GNU expr кажется, чтобы разрешить их как расширение, если они экранированы.

Ниже приведен переносимый вызов, который должен работать в любой POSIX-совместимой реализации expr:

expr "4" : '-\{0,1\}[0-9]\{1,\}$'
Другие вопросы по тегам