ruby 正規表示式

2021-06-18 09:44:44 字數 3086 閱讀 3615

**:

ruby支援的正規表示式符號(元字元)。

有這麼個規則:

不帶\的數字和字母不是元字元

帶\的符號也不是元字元

下文中出現的「匹配多位元組字元的正規表示式」是指,通過使用$kcode進行設定,或顯式地使用漢字選項(請參考正規表示式字面值)等方式進行的匹配多位元組字元的正規表示式。

^行首。與字串的頭部或換行符之後的位置相匹配。

$行尾。與字串的尾部或換行符之前的位置相匹配。不包括換行符本身。ruby 1.8 特性:以前,只匹配字串尾部換行符前的位置,現在則擴大到字串的尾部。trap::regexpp "\n".gsub(/$/, "o")

=> "o\n" (1.6)

=> "o\no" (1.8)

.匹配除換行符以外的任意乙個字元。使用正規表示式選項 m(多行模式。請參考正規表示式字面值) 時,則匹配包括換行符在內的任意乙個字元。在匹配多位元組字元的正規表示式中,則匹配乙個字(非單位元組)。當遇到不完整的多位元組字元的一部分(無法判斷該字元是多位元組字元?二進位制?還是ascii)時,也不會匹配。p /./e =~ "あ"[0,1]     # => nil

\w字母和數字。等同於[0-9a-za-z]。若為匹配多位元組字元的正規表示式時,則也會匹配日語的全形字符。

\w非字母和數字。

\w以外的單個字元。

\s空字元。相當於[ \t\n\r\f]

\s非空字元。[ \t\n\r\f] 以外的單個字元。

\d數字。即[0-9]

\d非數字

\a字串頭部。與^不同的是,它不受有無換行符的影響 。

\z字串尾部。若字串以換行符結尾,則匹配換行符前的位置。ruby 1.8 特性:以前,只匹配字串尾部換行符前的位置,現在則擴大到字串的尾部。trap::regexpp "\n".gsub(/\z/, "o")

=> "o\n"   (1.6)

=> "o\no" (1.8)

\z字串結尾。與$以及\z不同的是,它不受有無換行符的影響。

\b在字元範圍描述符之外時表示詞邊界(匹配從\w到\w)。在字元範圍描述符之內時表示退格符(0x08)。

\b非詞邊界

\g在上次成功匹配的地方(之後)進行匹配(不留餘地)。只有在首次使用時才會匹配到頭部(與\a相同)。可以用在scan和gsub中。當您想在上次匹配的地方之後再進行匹配的話,可以使用。舉個簡單(沒什麼用)的例子。# 從頭取出3位數字(數字必須相連)。

str = "123456 789"

str.scan(/\g\d\d\d/)

[ ]指定字元範圍。請參考字元範圍。

*前面元素至少出現0次。盡可能匹配較長的部分。

*?負責指定數量(quantifiers)。表示前面元素至少出現0次(盡量匹配短的部分)+負責指定數量(quantifiers)。表示前面元素至少出現1次+?負責指定數量(quantifiers)。表示前面元素至少出現1次(盡量匹配短的部分) 指定元素重複出現的次數(interval quantifier)。分別表示前面元素重複出現m 次 至少 m 次 至少 m 次,至多 n 次 或 將導致匹配失敗。str = "foofoofoo"

p str[/(foo)/]   # => "foo"

p str[/(foo)/] # => "foofoofoo"

p str[/(foo)/] # => "foofoo"

正規表示式 ?, *, + 分別等同於 , 。? ? ?指定元素重複出現的次數(interval quantifier)。分別表示前面元素重複出現m 次 至少 m 次 至少 m 次,至多 n 次 (盡量匹配短的部分)。?負責指定數量(quantifiers)。表示前面元素至多出現1次。??負責指定數量(quantifiers)。表示前面元素至多出現1次(盡量匹配短的部分)|選擇(alternative)。( )正規表示式的群組化。與括號中的正規表示式相匹配的字串將被儲存下來,供後方參考使用。\1, \2 ... \n後方參考(back reference)。請參考後方參考。(?# )注釋。括號中的任意字串將被忽視。(?: )不具備後方參考功能的群組化。它不為\1,\2(或$1,$2)提供服務,是一種單純的群組功能。/(abc)/ =~ "abc"

p $1

=> "abc"

/(?:abc)/ =~ "abc"

p $1

=> nil

(?= )先行(lookahead)。使用模式(pattern)指定位置(不留間隔)(?=re1)re2

表示將匹配同時符合re1和re2的要求的字串。re1(?=re2)

という山附は、稿に re2 とマッチする矢機誤が魯く、正規表示式 re1 です。p /foo(?=bar)/ =~ "foobar"      # => 0

p $&    # => "foo"   (bar の嬸屍の攫鼠はない)

(?! )否定先行(negative lookahead)。使用否定的模式(pattern)來指定位置(不留間隔)(?!re1)re2

該正規表示式表示,匹配re1但不匹配re2。# 除000以外的3位數字

re = /(?!000)\d\d\d/

p re =~ "000"   # => nil

p re =~ "012"   # => 0

p re =~ "123"   # => 0

# c語言識別符號 (首位是[a-za-z_]然後是[0-9a-za-z_]的字串)

/\b(?![0-9])\w+\b/

(?> )禁用回縮功能。該功能尚處於試驗階段。將來有可能被停用,請您注意使用。特別是不要在廣義庫中使用。(?ixm-ixm)正規表示式中的i選項、x選項、m選項的開關。請您參考正規表示式字面值來了解選項的詳細內容。re = /a(?i)a(?-i)a/

p re =~ "aaa"         # => 0

p re =~ "aaa"         # => 0

p re =~ "aaa"         # => nil

(?ixm-ixm: )括號中的i選項、x選項、m選項的開關。在括號範圍內有效。re = /a(?i:a)a/

p re =~ "aaa"         # => 0

p re =~ "aaa"         # => 0

p re =~ "aaa"         # => nil

ruby正規表示式

ruby用 將正規表示式括起來。表示開頭,表示結尾,表示0個以上的任意字元。現在就講講正規表示式的規則的寫法。正規表示式中有很多上述的具有特別意義的字元。首先是下列字元。範圍描述符。a z 表示從a到z之間的任意乙個。w 英文本母和數字。即 0 9 a z a z w 非英文本母和數字 s 空字元,...

Ruby 正規表示式

ruby的正規表示式以 作為構造方法。表示式返回乙個regexp的物件。一般規則 a 匹配字元a。匹配特殊字元?特殊字元包括 匹配任意字元,例如 a.匹配ab和ac。ab c 匹配ac和bc,之間代表範圍。例如 a z a za z0 9 a za z0 9 匹配不在該範圍內的字串。d 代表任意數字...

ruby正規表示式

ruby中常會用到正規表示式。正規表示式是用來表達字串的模式 pattern 的。也可以這麼理解 我們使用正規表示式來表示某種搜尋規則,然後使用該正規表示式來完成字串的搜尋工作。舉個例子,假定有這樣的搜尋規則 字串以 foo 開始,以 r 結束 那麼就可以使用以下正規表示式來表示該規則。foo.r ...