亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

?? ??? ??
Ruby用戶指南 3、開始 4、簡單的例子 5、字符串 6、正則表達(dá)式 7、數(shù)組 8、回到那些簡單的例子 9、流程控制 10、迭代器 11、面向?qū)ο笏季S 12、方法 13、類 14、繼承 15、重載方法 16、訪問控制 17、單態(tài)方法 18、模塊 19、過程對象 20、變量 21、全局變量 22、實(shí)變量 23、局部變量 24、類常量 25、異常處理:rescue 26、異常處理:ensure 27、存取器 28、對象的初始化 29、雜項(xiàng) RGSS入門教程 1、什么是RGSS 2、開始:最簡單的腳本 3、數(shù)據(jù)類型:數(shù)字 4、數(shù)據(jù)類型:常量與變量 5、數(shù)據(jù)類型:字符串 6、控制語句:條件分歧語句 7、控制語句:循環(huán) 8、函數(shù) 9、對象與類 10、顯示圖片 11、數(shù)組 12、哈希表(關(guān)聯(lián)數(shù)組) 13、類 14、數(shù)據(jù)庫 15、游戲?qū)ο?/a> 16、精靈的管理 17、窗口的管理 18、活動指令 19、場景類 Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類,對象和變量 容器Containers,塊Blocks和迭代Iterators 標(biāo)準(zhǔn)類型 深入方法 表達(dá)式Expressions 異常,捕捉和拋出(已經(jīng)開始,by jellen) 模塊 基本輸入輸出 線程和進(jìn)程 當(dāng)遭遇挫折 Ruby和它的世界 Ruby和Web開發(fā) Ruby Tk Ruby 和微軟的 Windows 擴(kuò)展Ruby Ruby語言 (by jellen) 類和對象 (by jellen) Ruby安全 反射Reflection 內(nèi)建類和方法 標(biāo)準(zhǔn)庫 OO設(shè)計 網(wǎng)絡(luò)和Web庫 Windows支持 內(nèi)嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊 Ruby首頁 卷首語 Ruby的啟動 環(huán)境變量 對象 執(zhí)行 結(jié)束時的相關(guān)處理 線程 安全模型 正則表達(dá)式 字句構(gòu)造 程序 變量和常數(shù) 字面值 操作符表達(dá)式 控制結(jié)構(gòu) 方法調(diào)用 類/方法的定義 內(nèi)部函數(shù) 內(nèi)部變量 內(nèi)部常數(shù) 內(nèi)部類/模塊/異常類 附加庫 Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術(shù)語集 Ruby的運(yùn)行平臺 pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
??

我們再看一個更有趣的程序.這次我們來測試一個字符串是否和一個由簡明模式(concise?pattern)編碼產(chǎn)生的描述相匹配.

在這些模式(pattern)里,一些字符或字符組合都有獨(dú)特的意義,包括:?

[]??范圍描述符?(比如,[a?-?z]?表示在a?到?z?范圍內(nèi)的一個字母)??

\w??字母或數(shù)字;相當(dāng)于?[0-9A-Za-z]?

\W??非字母,數(shù)字?

\s??[?\t\n\r\f]空字符;相當(dāng)于?[?\t\n\r\f]?

\S??非空字符?

\d??[0-9]數(shù)字;相當(dāng)于?[0-9]?

\D??非數(shù)字字符?

\b??退格符?(0x08)?(僅在范圍描述符內(nèi)部時)?

\b??字邊界(word?boundary)?(在范圍描述符外部時)?

\B??非字邊界?

*??前面元素出現(xiàn)0或多次?

+??前面元素出現(xiàn)1或多次?

{m,n}??前面元素最少出現(xiàn)m次,最多出現(xiàn)n次?

???前面元素最多出現(xiàn)1次;相當(dāng)于?{0,1}?

|??與前面或后面的表達(dá)式匹配?

()??群(?grouping)?

那些模式中共同使用的古怪詞匯叫做正則表達(dá)式.就象Perl一樣,Ruby也用前斜杠(而不是雙引號)將它們括起來.如果你以前從未使用過正則表達(dá)式,也許它們看起來除了規(guī)則(regular)什么都不是,但花上一點(diǎn)兒時間了解它們是明智的.當(dāng)你需要對字符串進(jìn)行模式匹配,查找或其它操作時,它的高效的表達(dá)能力能治好你的頭痛(并節(jié)約很多行代碼).

舉個例子,設(shè)想我們想要測試一個字符串是否符合這樣的描述信息"由小寫f開頭,跟一個大寫字母,并可能跟許多非小寫字母在后面."如果你是一個老練的C程序員,大概你的頭腦里已經(jīng)裝滿幾十行程序了,對不對?承認(rèn)吧,你難以控制住自己.在Ruby里,你只需要將你的字符串用正則表達(dá)式/^f[A-Z](^[a-z])*$/檢驗(yàn)一下就可以了.

那"一個由<>括起來的16位數(shù)呢"?沒問題.

ruby>?def?chab(s)???#?"contains?hex?in?angle?brackets"
????|????(s?=~?/<0(x|X)(\d|[a-f]|[A-F])+>/)?!=?nil
????|?end
??nil
ruby>?chab?"Not?this?one."
??false
ruby>?chab?"Maybe?this??{0x35}"????#?wrong?kind?of?brackets
??false
ruby>?chab?"Or?this??<0x38z7e>"????#?bogus?hex?digit
??false
ruby>?chab?"Okay,?this:?<0xfc0004>."
??true?

雖然,初看起來正則表達(dá)式挺讓人頭痛的,但你很快會因能夠如此高效地表達(dá)出你心中的意思而感到滿足.

下面是一個可以幫助你實(shí)驗(yàn)正則表達(dá)式的小程序,把它存為regx.rb,然后在命令行里輸入'ruby?regx.rb'運(yùn)行.

#?Requires?an?ANSI?terminal!
st?=?"\033[7m"
en?=?"\033[m"
while?TRUE??
????print?"str>?"??
????STDOUT.flush??
????str?=?gets??
????break?if?not?str??
????str.chop!??
????print?"pat>?"??
????STDOUT.flush??
????re?=?gets??
????break?if?not?re??
????re.chop!??
????str.gsub!?re,?"#{st}\\&#{en}"??
????print?str,?"\n"
end
print?"\n"?

這個小程序要求輸入兩次,一次字符串,一次正則表達(dá)式.輸入的字符串由正則表達(dá)式檢驗(yàn),然后用反視高亮度顯示所有匹配部分.先別管細(xì)節(jié),等會兒就有代碼分析.

str>?foobar
pat>?^fo+
foobar
~~~?

上面紅色部分將在程序輸入中以反視表示出.下面的"~~~"行是為了方便那些使用基于字符瀏覽器的人.

我們再試幾個輸入:

str>?abc012dbcd555
pat>?\d
abc012dbcd555

如果讓你感到驚訝,看看本頁開頭部分的那個表格:?\d與字母d無關(guān),而是對應(yīng)于單個數(shù)字.

如果有不止一種方法能匹配模式會怎樣呢?

str>?foozboozer
pat>?f.*z
foozboozer
~~~~~~~~?

之所以foozbooz被匹配而不只是fooz,是因?yàn)橐粋€正則表達(dá)符盡可能匹配最長的子串.

下面是一個將冒號分隔的數(shù)字時間段從字符串中隔離出來的模式匹配.

str>?Wed?Feb??7?08:58:04?JST?1996
pat>?[0-9]+:[0-9]+(:[0-9]+)?
Wed?Feb??7?08:58:04?JST?1996

"=~"是一個用于匹配正則表達(dá)式的匹配(matching)運(yùn)算符;它會返回在字符串里找到的匹配的位置,或者返回?nil?表示模式無法匹配.

ruby>?"abcdef"?=~?/d/
???3
ruby>?"aaaaaa"?=~?/d/
???nil? 版權(quán)聲明:RUBY文檔中心的所有文章標(biāo)明[原創(chuàng)]的均為本站作品,版權(quán)屬RUBY中文化計劃,若轉(zhuǎn)載請注明;標(biāo)明[翻譯]的其外文版權(quán)歸原作者,譯文版權(quán)屬RUBY中文化計劃;標(biāo)明[轉(zhuǎn)貼]的,若原作者感到侵犯了他的著作權(quán),那么請及時跟主持人聯(lián)系,我們會盡快更正。 ?
?? ??: ?? ??: