正規表示式之字元組
正規表示式之字元組
普通字元組
字元組(Character Class)是正規表示式最基本的結構之一,要理解正規表示式的“靈活”,認識它是第一步。
顧名思義,字元組就是一組字元,在正規表示式中,它表示“在同一個位置可能出現的各種字元”,其寫法是在一對方括號[和]之間列出所有可能出現的字元,簡單的字元組比如[ab]、[314]、[#.?]在解決一些常見問題時,使用字元組可以大大簡化操作,下面舉“匹配數字字元”的例子來說明。
字元可以分為很多類,比如數字、字母、標點等。有時候要求 “只出現一個數字字元”,換句話說,這個位置上的字元只能是0、1、2、…、8、9這10個字元之一。要進行這種判斷,通常的思路是:用10個條件分別判斷字元是否等於這10個字元,對10個結果取“或”,只要其中一個條件成立,就返回True,表示這是一個數字字元,其虛擬碼如例1-1所示。
例1-1 判斷數字字元的虛擬碼
charStr == "0" || charStr == "1" … || charStr == "9"
注:因為正規表示式處理的都是“字串”(String)而不是“字元”,所以這裡假設變數charStr(雖然它只包含一個字元)也是字串型別,使用了雙引號,在有些語言中字串也用單引號表示。
這種解法的問題在於太煩瑣——如果要判斷是否是一個小寫英文字母,就要用||連線26個判斷;如果還要相容大寫字母,則要連線52個判斷,程式碼長到幾乎無法閱讀。相反,用字元組解決起來卻異常簡單,具體思路是:列出可能出現的所有字元(在這個例子裡就是10個數字字元),只要出現了其中任何一個,就返回True。例1-2給出了使用字元組判斷的例子,程式語言使用Python。
例1-2 用正規表示式判斷數字字元
re.search("[0123456789]", charStr) != None
re.search()是Python提供的正規表示式操作函式,表示“進行正規表示式匹配”;charStr仍然是需要判斷的字串,而[0123456789]則是以字串形式給出的正規表示式,它是一個字元組,表示“這裡可以是0、1、2、…、8、9中的任意一個字元。只要charStr與其中任何一個字元相同(或者說“charStr可以由[0123456789]匹配”),就會得到一個MatchObject物件(這個物件暫時不必關心,在第21頁會詳細講解);否則,返回None。所以判斷結果是否為None,就可以判斷charStr是否是數字字元。
當今流行的程式語言大多支援正規表示式,上面的例子在各種語言中的寫法大抵相同,唯一的區別在於如何呼叫正規表示式的功能,所以用法其實大同小異。例1-3列出了常見語言中的表示,如果你現在就希望知道語言的細節,可以參考本書第三部分的具體章節。
例1-3 用正規表示式判斷數字字元在各種語言中的應用[1]
.NET(C#)
//能匹配則返回true,否則返回false
Regex.IsMatch(charStr, "[0123456789]");
Java
//能匹配則返回true,否則返回false
charStr.matches("[0123456789]");
JavaScript
//能匹配則返回true,否則返回false
/[0123456789]/.test(charStr);
PHP
//能匹配則返回1,否則返回0
preg_match("/[0123456789]/", charStr);
Python
#能匹配則返回RegexObject,否則返回None
re.search("[0123456789]", charStr)
Ruby
#能匹配則返回0,否則返回nil
charStr =~ /[0123456789]/
可以看到,不同語言使用正規表示式的方法也不相同。如果仔細觀察會發現Java、.NET、Python、PHP中的正規表示式,都要以字串形式給出,兩端都有雙引號";而Ruby和JavaScript中的正規表示式則不必如此,只在首尾有兩個斜線字元/,這也是不同語言中使用正規表示式的不同之處。不過,這個問題現在不需要太關心,因為本書中大部分例子以Python程式來講解,下面講解關於Python的基礎知識,其他語言的細節留到後文會詳細介紹。
本文節選自《正則指引》一書 餘晟著
圖書詳細資訊:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-729859/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 正規表示式匹配雙位元組字元字元
- 匹配雙位元組字元的正規表示式字元
- 正規表示式 ^元字元字元
- 正規表示式 $ 元字元字元
- 正規表示式元字元字元
- 正規表示式 字元和字元類字元
- 正規表示式提取指定字元之間字串字元字串
- 正規表示式教程之匹配一組字元詳解字元
- 匹配雙位元組字元的正規表示式程式碼字元
- 正規表示式 \v 元字元字元
- 正規表示式 \f 元字元字元
- 正規表示式 \B 元字元字元
- 正規表示式 \xnn元字元字元
- 正規表示式 \b元字元字元
- 正規表示式 \D 元字元字元
- 正規表示式 \s 元字元字元
- 正規表示式 \r 元字元字元
- 正規表示式 \n 元字元字元
- 正規表示式 \W元字元字元
- 正規表示式 \w 元字元字元
- 正規表示式 \d元字元字元
- 正規表示式 轉義字元字元
- 正規表示式 \t元字元字元
- 正規表示式 \0元字元字元
- 正規表示式 點(.)元字元字元
- 正規表示式 \t 元字元字元
- 正規表示式[\b]元字元字元
- 正規表示式元字元與普通字元字元
- 匹配空白字元正規表示式字元
- 正規表示式元字元大整理字元
- 利用正規表示式提取固定字元之間的字串字元字串
- 匹配雙位元組字元的正規表示式程式碼例項字元
- 【正規表示式系列】一些概念(字元組、捕獲組、非捕獲組)字元
- 正規表示式中常用的元字元字元
- 正規表示式 \xxx 元字元字元
- 正規表示式中括號[]字元類字元
- 正規表示式 中括號[] 字元類字元
- 正規表示式需要轉義的字元字元