Ruby筆記《一》Regexp正規表示式

2021-09-21 16:03:25 字數 2340 閱讀 5870

正規表示式

正規表示式在很多場景都適用。例如,驗證字串是否匹配格式,查詢匹配的字串,替換匹配的字串。

很多程式語言都支援正規表示式,語法也相近。

正規表示式由兩部分組成:模式和匹配字串。

通常我們說的寫乙個正規表示式,就是寫乙個模式。然後驗證一些輸入的字串是否匹配這個模式。

regexp

在ruby中模式叫做regexp。用/.../或者%r(...)包起來的內容就是這個regexp。

例如

/regexp/ 

%r(regexp) 

haystack中包含y,所以他們就匹配了。

/y/.match('haystack') #=

>

#<

matchdata

"y">

haystack中不包含needle,所以就不匹配,返回nil。

/needle/.match('haystack') #=

>

nil 

haystack中包含hay,所以就匹配。

/hay/.match('haystack')    #=

>

#<

matchdata

"hay"

>

metacharacters and escapes

字元(,),[,],,.,?,+,*都是元字元,在模式中特殊的含義,如果想要匹配這些字串的,需要在它們前面加上反斜槓\,使得這些特殊字元從模式中escape,代表普通的字元。

/1 \+ 2= 

3\?/.match('does 1 + 2= 

3?') #=

>

#<

matchdata

"1 + 2= 

3?">

ruby表示式也可以嵌入到模式中,只要寫在#中就可以。

place

= "東京都"

/#/.match("go to 東京都") 

#=>

#<

matchdata

"東京都"

>

character classes

用括起來的一些字元,看他們是否在match**現。/[ab]/代表a或b,/ab/代表a後面要跟著b。

/w[aeiou]rd/.match("word") #=

>

#<

matchdata

"word"

>

用-連線的兩個字元,代表乙個範圍,[a-d]和[abcd]是乙個意思。

中可以包含多個範圍[a-dx-z]和[abcdxyz]是乙個意思。

/[0-9a-f]/.match('9f') #=

>

#<

matchdata

"9">

/[9f]/.match('9f')     #=>

#<

matchdata

"9">

^代表相反的意思,就是除了模式中^後面的內容。

/[^a-eg-z]/.match('f') #=

>

#<

matchdata

"f">

repetition重複

重複符號可以指明字元重複的次數。

重複預設是貪婪的,它會盡力向後匹配,匹配更多的內容。懶惰匹配只找到最近的匹配字串,只做最少量的匹配。

通過新增?就可以使貪婪變成懶惰。

/

<.+

>

/.match("

<

a>

<

b>

")  #=

>

#<

matchdata

"<

a>

<

b>

">

/<.+

?>

/.match("

<

a>

<

b>

") #=

>

#<

matchdata

"<

a>

">

ruby 正規表示式Regexp

a 匹配字元a。匹配特殊字元?特殊字元包括 匹配任意字元,例如 a.匹配ab和ac ab c 匹配ac和bc,之間代表範圍。例如 a z a za z0 9 a za z0 9 匹配不在該範圍內的字串 d 代表任意數字 w 代表任意字母,數字或者 s 代表空白字元,包括空格,tab和換行 d w s...

JS正則 RegExp概述

ecmascript通過regexp型別支援正規表示式。格式 let expression pattern flagspattern 模式 flags 標記 說明 所有的元字元在模式中必須轉義 包括 元字元在正規表示式中都有一種或多種特殊功能,所以要匹配上面這些字元本身,就必須使用反斜槓來轉義。示例...

RegExp入門筆記

前言 一開始我是拒絕學正規表示式的,暑假看慕課上的php高階課程裡有一章是專門講正則,然後我思考的幾秒鐘,就略過了。理由和大家一樣,畏懼,聽很多人說正則很難,然後就果斷放棄。但是昨天看到知乎上有個話題,問大家為什麼不喜歡正則,然後看到下面很多大神說正則處理字串很有用,很有用,很有用,甚至有人說正則很...