第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Ruby 正則表達(dá)式

正則表達(dá)式是使用一串字符來(lái)匹配一系列符合某個(gè)語(yǔ)法規(guī)則的字符串,通常被用于檢索和替換符合模式的文字。本章節(jié)中我們講學(xué)習(xí)在 Ruby 中如何使用正則表達(dá)式。

1. 創(chuàng)建正則表達(dá)式

在 Ruby 中,我們?cè)趦蓚€(gè)/之間定義正則表達(dá)式,最簡(jiǎn)單的正則表達(dá)式匹配一個(gè)單詞或者一個(gè)字符串。

實(shí)例:

> /a/.class
=> Regexp

我們還可以使用Regexp類將字符串實(shí)例化為正則對(duì)象。

實(shí)例:

> regexp = Regexp.new("a")
=> /a/

除了上述方法還可以使用%r[]

實(shí)例:

> regexp = %r{\w+}
=> /\w+/

2. 如何使用正則表達(dá)式

2.1 匹配一個(gè)字符或一組字符

我們通常使用=~來(lái)進(jìn)行字符串和正則表達(dá)式的匹配,正則表達(dá)式中寫(xiě)出我們需要匹配的字符或字符串即可。

實(shí)例:

'Hello World' =~ /Hello/

# ---- 輸出結(jié)果 ----
0

解釋:之所以結(jié)果返回0,是因?yàn)樵谧址?索引找到該單詞Hello(返回該單詞首次出現(xiàn)的索引)。

那如果字符串不能匹配正則呢?

那將返回nil

實(shí)例:

'Hello World' =~ /Hi/

# ---- 輸出結(jié)果 ----
nil

Tips=~返回nil或者匹配的第一個(gè)索引。

檢查字符串是否匹配正則的第二種方式是使用match。

實(shí)例:

if "Hello World".match?(/Hello/)
  puts "Match found!"
end

# ---- 輸出結(jié)果 ----
Match found!

Tips:match?是2.4之后才有的方法,返回true或false,2.4之下只有match方法,返回MatchData對(duì)象。

2.2 匹配指定幾個(gè)字符或范圍字符

我們使用[],來(lái)匹配幾個(gè)指定字符或者范圍的字符。

匹配所有帶a、b、c的字符串。

實(shí)例:

def contains_abc(str)
  str =~ /[abc]/
end

contains_abc('test')
contains_abc('bell')
contains_abc('apple')

# ---- 輸出結(jié)果 ----
nil
0
0

匹配a~c的所有字符(abc)。

實(shí)例:

def contains_abc(str)
  str =~ /[a-c]/
end

contains_abc('test')
contains_abc('bell')
contains_abc('apple')

# ---- 輸出結(jié)果 ----
nil
0
0

解釋:上述的例子表示,[a-c][abc]代表一樣的內(nèi)容。

Tips:同樣的[1-5]也代表[12345]。

另外我們還有一個(gè)取反的操作。使用^

實(shí)例:

def contains_abc(str)
  str =~ /[^a-c]/
end

contains_abc('test')
contains_abc('bell')
contains_abc('apple')

# ---- 輸出結(jié)果 ----
0
1
1

解釋:test第一個(gè)字符是t,符合不是a、b、c的正則所以返回索引0,bell的第一個(gè)字符b不匹配正則,而e匹配,所以返回索引1,apple的第一個(gè)字符a不匹配正則,p匹配,所以返回1。

這些是常用匹配范圍字符的正則:

方法 時(shí)機(jī)簡(jiǎn)介(調(diào)用的時(shí)機(jī))
\w 同:[0-9a-zA-Z_]
\d 同:[0-9]
\s 同:匹配空格、制表符、換行符。
\W 同:[^0-9a-zA-Z_]
\D 同:[^0-9]
\S 同:不是空格、制表符、換行符。
. 可以匹配任意字符。

.可以匹配任意字符,\.僅可以匹配.字符。

實(shí)例:

p "6b6" =~ /\d.\d/
p "6b6" =~ /\d\.\d/
p "6.6" =~ /\d\.\d/

# ---- 輸出結(jié)果 ----
0
nil
0

2.3 一次匹配多個(gè)字符

上述正則只能讓我們一次匹配一個(gè)字符,現(xiàn)在讓我們來(lái)匹配多個(gè)字符。

需要使用的模式修飾符如下:

正則 匹配內(nèi)容
+ 一個(gè)或多個(gè)
* 0個(gè)或多個(gè)
? 0個(gè)或1個(gè)
{2,4} 2~4之間

比如現(xiàn)在要判斷一個(gè)字符串?dāng)?shù)字是否由均為數(shù)字組成。

實(shí)例:

'10000' =~ /^\d+$/
'9999a' =~ /^\d+$/

# ---- 輸出結(jié)果 ----
0
nil

解釋\d+匹配一個(gè)或多個(gè)字符串,而^$分別匹配開(kāi)頭和結(jié)尾。

Tips:如果要嚴(yán)格匹配字符串的開(kāi)頭而不是僅在每一行(在\n之后)匹配,則需要使用\A和\Z而不是^和$。

如果字符數(shù)量確認(rèn),比如4個(gè)字符,可以使用/\d\d\d\d/或者/\d{4}/。

實(shí)例:

'word' =~ /\w\w\w\w/
'word' =~ /\w{4}/

# ---- 輸出結(jié)果 ----
0
0

2.4 使用長(zhǎng)正則

我們使用%r{}x來(lái)對(duì)長(zhǎng)正則增加換行以及注釋操作,使之閱讀起來(lái)更簡(jiǎn)單。

實(shí)例:

IP_FORMAT = %r{
  ^\d{1,3} # 1
  \.
  \d{1,3}  # 2
  \.
  \d{1,3}  # 3
  \.
  \d{1,3}$ # 4
}x

str = "192.168.1.1"
p str =~ IP_FORMAT

# ---- 輸出結(jié)果 ----
0

3. 正則表達(dá)式選項(xiàng)

在 Ruby 中我們可以在正則中添加一些選項(xiàng),改變正則的行為。

選項(xiàng) 時(shí)機(jī)簡(jiǎn)介(調(diào)用的時(shí)機(jī))
i 正則表達(dá)式不區(qū)分大小寫(xiě)
m 點(diǎn)匹配換行符
x 忽略空格

要使用這些選項(xiàng)要在正則表達(dá)式結(jié)束后在末尾添加選項(xiàng)字母。

實(shí)例:

> "abc".match?(/[A-Z]/i)
=> true

4. 正則和 Ruby 的方法一起使用

正則可以和 Ruby 的許多方法一起使用,在這里舉幾個(gè)例子。

scan一起使用。

實(shí)例:

> "Hello World".scan(/\w+/)
=> ["Hello", "World"]

解釋:匹配到了字符串中所有的單詞,并生成了一個(gè)數(shù)組。

gsub一起使用。

實(shí)例:

> "hello world".gsub(/\w+/) {|w|w.capitalize}
=> "Hello World"

匹配郵箱格式是否正確。

實(shí)例:

> email = "test@example.com"
> !!(email=~ /\A[\w.+-]+@\w+\.\w+\z/)
=> true

Tips:這里!!將結(jié)果轉(zhuǎn)換成了布爾值。

4. 小結(jié)

本章節(jié)中我們學(xué)會(huì)了如何去創(chuàng)建一個(gè)正則,使用正則來(lái)匹配一個(gè)或多個(gè)字符,了解了正則表達(dá)式的寫(xiě)法以及正則和Ruby方法的應(yīng)用,在實(shí)際情況中大家要多多嘗試使用正則,會(huì)極大提高自己的編程水平。