Разница в выражении 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,\}$'