簡體   English   中英

Ruby正則表達式和括號。 括號是做什么的?

[英]Ruby regular expressions and bracket. What do the brackets do?

我正在閱讀Peter Cooper的書“ Beginning Ruby”,並且對一些字符串方法和正則表達式用法有一些疑問。 我想我對什么是正則表達式很清楚:“一個描述與其他字符串中的元素匹配的模式的字符串”。

所以:

"This is a test".scan(/\w\w/) {|x| puts x}

Output:
Th
is
is
te
st
=> "This is a test"
  1. 因此它一次打印兩個字符。 我沒有意識到它還會返回原始字符串。 為什么是這樣?

也,

    "This is a test".scan(/[aeiou]/) { |x| puts x }
  1. 括號是做什么的? 我認為它們被稱為字符類,但是我不確定它們到底是做什么的。 庫珀書中的解釋並不十分冗長和清晰。

字符類說明:

“在此階段,您需要了解的正則表達式的最后一個重要方面是字符類。它們使您可以與一組特定的字符進行匹配。例如,您可以掃描字符串中的所有元音:”

是的,它稱為字符類

字符類定義一組字符。 說“匹配類指定的一個字符”。 字符類的兩個實現被視為正類[ ]和負類[^ ] 正字符類允許您定義而負類允許您定義不能出現在一個字符串匹配項的字符列表出現匹配字符的列表,其中任何一個都可能會出現在一個字符串發生。

角色類別的說明:

[aeiou]    # any character of: 'a', 'e', 'i', 'o', 'u'
  1. scan方法通常返回具有匹配項的數組,但可以選擇接受一個塊,這等效於對each結果數組進行處理。

    這是文檔: http : //www.ruby-doc.org/core-2.1.3/String.html#method-i-scan

  2. 對於第二個問題,@ hwnd已經給您一個明確的答案。 最好的學習方法是進行實驗, regex101.com是我通常使用的在線工具。 它列出了所有匹配元素的說明,因此也是很好的學習資源。

    您可能想嘗試的一些方法:

    1. 123abab12ab1234 ,模式為[123]
    2. 123abab12ab1234 ,模式為[ab]+
    3. 圖案為b[1|a] 123abab12ab1234

要記住的一件事是,一個字符類匹配一個字符,例如:

str = 'XXXaeiouXXX'
puts str
str.sub!(/[aeiou]/, '.')
puts str

--output:--
XXXaeiouXXX
XXX.eiouXXX

字符類說:“匹配此字符或此字符或此字符...一次”。

還要檢查ruular:

http://rubular.com/

我沒有意識到它還會返回原始字符串。 為什么是這樣?

這樣就可以將方法鏈接在一起:

my_str.scan(...).downcase.capitalize.each_char {|char| puts char}.upcase.chomp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM