re 的 ? 從來都不是匹配 any character,從 posix re, extension, 或是 pcre 到各平台不同實作,所有的 ? 基本上都是 greedy switch,不是 match any character。
有人會說,那我 ls 的 ? 是 match any character 啊,* 是 match any string,很抱歉,那東西叫 glob/wildcard,別把這兩者搞混,真不懂我在講什麼,請在 linux 下執行 man 7 glob
http://man7.org/linux/man-pages/man7/glob.7.html
re 在各不同的實作裡,除了版本不同有所擴展之外,基本的 match rule 都是完全一樣。pcre > re ex > re,大都是一層層堆上去的,也就是 perl re 跟 pcre 提供最多功能,re ex 次之,posix re 最少。
至於各不同應用程式之間實作最大的差異主要是在於 \d 這類跳脫字元的定義,所以我寫 re 一直都會避開使用 \d 這類的寫法,而是用 [0-9] 這種標準寫法。
因為我寫過啊... 我 20 年前用 ...