正則是我們日常程式設計中一定會使用到的,不管是各種語言中的正則匹配,還是linux/unix系統上的grep/egrep命令,都是在使用正則來匹配字串。隨著用的深入,可能會感到越來越迷惑:
-- 比如php的preg系列和ereg系列
-- 比如unix的grep命令和perl語言的grep
正規表示式(regular expression)從2023年就開始出現這個概念,後來unix之父ken tompson將這個概念引入unix,出現了grep工具。但是隨著unix的版本不斷演化,unix的差異也越來越大,一統江湖的posix標準就此出現。posix(portable operating system inte***ce for unix)提供的是統一的unix介面,當然也把正則這塊統一了。於是出現了posix的兩種標準:posix basic regular expressions (bre)和posix extended regular expressions(ere)。
bre就是現在unix系統使用的grep命令,ere就是現在unix系統使用的egrep命令。ere就是bre的擴充套件包的意思,基本語法都是一樣的,但是兩者還是有一些區別,比如對於一些特殊符號,「」是否需要使用反斜桿:
要匹配「tt」,在bre中使用「t\」,在ere中則是使用「t」
bre和ere還有的區別就是ere多了+,?。具體可以看這篇文章:
ps:現在網路上說的正則,如果沒有特殊說明,應該都是指的是ere。它也是現在使用最廣的正則了。
ps2:grep -e就和egrep是一樣的。
如果世界上的正則只有一種標準,那一切看起來都這麼完美,但是在計算機世界總是有各種各樣的歷史問題。
有很多種語言也自己定義了一套正則標準,雖然大體上和posix的這套很像,但總還是有一些不同的細節的。比如perl,python,tcl(tool command language)。都有自己定義的一套正則標準。其中perl的正則到現在演化成為pcre(perl compatible regular expressions)。這個正則語法也是被php所採用的。
gnu grep,linux機器上使用最廣泛的正則語法,幾乎所有的linux機器上的grep命令都是gnu grep。它和posix是一致的,有gnu basic regular expressions 和gnu extends regular expressions。
關於各種版本的正則的不同可以檢視這篇
php中有兩套正則函式集:preg和ereg (如果你算上mb_ereg那就有三套)
preg和ereg分別代表的是pcre regular expression和posix extension regular expression。preg和ereg有一些不同,最大的不同就是preg有「分隔符」(一般是\或者|)來將正規表示式劃出來。還有就是preg是沒有大小寫不同的函式的,它使用「模式修飾符」來對大小寫進行匹配。下面是摘自php文件的函式對照表:
文件中提到的乙個例子需要注意下的:
one(self)?(selfsufficient)? 匹配字串「oneselfsufficient 」 在ereg是會匹配出oneselfsufficient的,但是在preg是匹配到oneself的。就是說posix會盡可能的匹配正則,而對於這種可「多種」匹配的正則,pcre的選擇更為保守。
go中的正則包是regexp,它使用的是叫做re2(這個c++寫的庫,這個庫支援了兩種標準:perl 和 posix
在函式中也有體現
mustcompile
mustcompileposix
所以呢,下面這個**:
package main
import(
"regexp"
"fmt"
)func main()
\z是只在perl的正則語法存在,表示以t為結尾,在posix中沒有,所以如果你把注釋的部分放開,這個程式就會丟擲panic
go的re2支援哪些語法可以看 這個頁面說明
跳槽的迷思
這幾天北京的天氣比較寒冷,人也懶惰點了。一直想就跳槽的話題寫點東西,元旦幾個朋友聚會這個話題又一直觸動了我的神經。我的朋友有兩類一模擬較活躍的,基本遇到好的就跳 一部分像我一樣喜歡在乙個地方 賴著 乙個人跳槽會有很多原因,金錢 滿足感 工作環境 不一而足。年輕的時候跳槽,多數是把金錢考量放在第一標準...
SEO資料的迷思
目前是seo初學者最困難的階段。可能老seoer不以為然,覺得早些時候自己學習seo時,邊啃english邊尋找新大陸般的找資料更難。我們不妨來分析一下現狀 seo資料的時效性 胡寶介女士的經典作品 搜尋引擎優化 seo 知識完全手冊 曾經作為seo教材般傳播,都隨著時間流失,搜尋引擎技術 演算法的...
gulp與webpack的迷思
寫在前面 這文章寫於15年末,後來16年才放到segmentfault上來,看到陸續還是有瀏覽量甚至收藏,以免造成誤導還是在文章前頭稍稍提醒一下.當時觀點放到今天難免有些打臉,就目前來說webpack已經完全佔據主流位置,連我自己的專案都很少會在開發階段用glup了.但我依然覺得webpack與gl...