[翻譯系列]正則表達式簡介

正則表達式

本文翻譯自英文博客,來源鏈接請戳這裏

正則表達式簡介

正則表達式是用來表達字符串集合的符號標記(符號標記串)。當特定的字符串符合正則表達式所描述的字符串集合的規則時,通常我們說該字符串和該正則表達式所匹配(match)。

最簡單的正則表達式是單個字面意思的字符。例如a、b、c、1、2、3這樣的字符,不同於*+?()|這樣的元字符,非元字符表示他們本身。也就是模式(pattern)串"a"僅僅匹配字符串"a"。換句話說,該模式串描述的字符串集合僅僅表示集合{"a"},僅此而已。如果我們想要表示元字符本身,使用轉義字符\。例如我們可以使用\+來表示字面意思的+字符。因此,如果我們想要匹配\本身,那麼需要使用\\

正則表達式之間可以做一定的運算從而形成新的正則表達式。這樣的運算包括alternated或者concatenated。假如e1能夠匹配到s並且e2能夠匹配t。那麼e1|e2s或者t匹配,而e1e2st匹配。

元字符*,+?用來表示操作的重複運算。e1*能夠匹配到一連串的(零次或零次以上,匹配到的字符有可能不同,但是都在該模式描述的字符串集合裏)字符串。同理的,e1+匹配一次或者一次以上,e1?描述零次或者一次的匹配。

上述元字符的運算遵循一定的優先級規則。從最弱到最強的綁定,分別爲alternation,之後爲concatenation,最後是重複運算符。顯時的括號可以用來強制改變運算順序。例如:表達式ab|cd同表達式(ab)|(cd)表示相同的意思,而ab*同表達式a(b*)意思相同。

截止目前介紹的語法,同傳統的Unix egrep正則表達式語法保持一致。這一子集已經能夠基本上描述所有的正則語言了。不嚴格的講,正則表達式能夠表示特定的字符串集合,通過使用有限容量的內存,單趟就能夠完成匹配。在其他的一些編程語言裏,例如Perl,添加了一些新的操作或者轉義序列,他們有的使正則表達式更簡介直觀了,但有些也使得表達式更晦澀難懂了,但這些新的操作轉移序列都沒有使正則表達式(實現)更強大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章