BSD expr 与 GNU expr 的区别

BSD expr difference with GNU expr

有谁知道为什么

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

returns Mac OS X 上的 0 和 Linux?

上的 1

事实:Mac 使用 BSD expr Linux 使用 GNU

抱歉,我最初输入的是

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

expr 采用基本的正则表达式,而不是扩展的正则表达式。 (有关每个的定义,请参阅 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html。)

基本正则表达式不支持 ?+ 运算符;您需要改用边界。

  • ?\{0,1\} 实现(出现 0 到 1 次)
  • +\{1,\} 实现(出现 1 次或多次)

如果转义,GNU expr 似乎允许将它们作为扩展。

以下是一个可移植的调用,应该可以在 expr 的任何 POSIX 兼容实现中工作:

expr "4" : '-\{0,1\}[0-9]\{1,\}$'