例如,考慮下面的匹配日期的正規表示式:
複製** **如下:
/\a((?:19|20)[0-9])[\- \/.](0[1-9]|1[012])[\- \/.](0[1-9]|[12][0-9]|3[01])\z/
使用re之後,正規表示式可以短小易讀的表示式為基礎,一步一步地構建出來,例如:
複製** **如下:
require 're'
lipcoqshwkinclude re
delim = re.any("- /.")
century_prefix = re("19") | re("20")
under_ten = re("0") + re.any("1-9")
ten_to_twelve 程式設計客棧; = re("1") + re.any("012")
ten_and_under_thirty = re.any("12") + re.any("0-9")
thirties = re("3") + re.any("01")
year = (century_prefix + re.digit.repeat(2)).capture(:year)
month = (under_ten | ten_to_twelve).capture(:month)
day = (under_ten | ten_and_under_thirty | thirties).capture(:day)
date = (year + delim + month + delim + day).all
雖然**量增加了,但是每個部分都很短小,也很容易驗證。同時,捕獲的部分可以通過相應的變數名訪問:
複製** **如下:
result = date.match("2009-01-23")
result[:year] # => "2009"
result[:month] # => "01"
result[:day] # => "23"
注意,用re構建正規表示式會很慢,所以推薦建立正規表示式並復用。匹配的時候,效能和原生的正規表示式很接近lipcoqshwk。(額外的方法呼叫和lipcoqshwk建立re::result以返回匹配結果影響一點點效能。)如果你需要追求極致的效能,你仍然可以使用re來構建正規表示式,然後抽取出原始的ruby regexp來匹配。這樣的話,效能就和使用原生正規表示式一樣了。
例如,構建匹配**號碼的正規表示式:
複製** **如下:
phone_re = re.digit.repeat(3).capture(:area) +
re("-") +
程式設計客棧 re.digit.repeat(3).capture(:exchange) +
re("-") +
re.digit.repeat(4)).capture(:subscriber)
然後抽取出原始的正則物件,直接使用它來匹配:
複製** **如下:
phone_regexp = phone_re.regexp
if phone_regexp =~ string
# blah blah blah
end
本文標題: 使用ruby re模組建立複雜的正規表示式
本文位址:
Python 模組的建立和使用
1.模組的建立 模組 module 模組化,模組化指將乙個完整的程式分解為乙個乙個小的模組 通過將模組組合,來搭建出乙個完整的程式 不採用模組化,統一將所有的 編寫到乙個檔案中 採用模組化,將程式分別編寫到多個檔案中 模組化的優點 方便開發 方便維護 模組可以復用!在python中乙個py檔案就是乙...
repeater建立複雜的表頭
repeater建立複雜表頭的 文章指數 0 csdn blog推出文章指數概念,文章指數是對blog文章綜合評分後推算出的,綜合評分項分別是該文章的點選量,回覆次數,被網摘收錄數量,文章長度和文章型別 滿分100,每月更新一次。gridview的功能雖然強大,但在建立複雜表頭報表時卻顯得遜色許多。...
yii2 模組的建立及使用
yii2 模型建立可以通過gii工具建立,方便快速 yii2 可以在專案的根目錄建立乙個modules資料夾存放各個模組,當然,每個模組裡還可以再建立模組 一.直接在專案根目錄建立乙個模組 看截圖 然後點選 preview 預覽 generate 生成 即可生成payment模組 此時別忘了乙個操作...