簡體   English   中英

此gsub和正則表達式如何工作?

[英]How does this gsub and regex work?

我正在嘗試學習ruby,並且很難弄清楚這段代碼的每個部分在做什么。 具體來說,全局子集如何確定兩個序號是否均為這些值之一[13579]以及如何在它們之間添加破折號( - )?

def DashInsert(num)
  num_str = num.to_s
  num_str.gsub(/([13579])(?=[13579])/, '\1-')
end
num_str.gsub(/([13579])(?=[13579])/, '\1-')
  • ()稱為捕獲組,捕獲與捕獲組內存在的模式匹配的字符。 因此,捕獲組中存在的模式為[13579] ,它與給定數字集中的單個數字匹配。 相應的數字被捕獲並存儲在索引1中。

  • (?=[13579])正向超前,它斷言匹配必須跟隨由超前內部的模式匹配的字符或字符串。 僅在滿足此條件時才進行更換。

  • \\1表示存在於組索引1中的字符。

例:

> "13".gsub(/([13579])(?=[13579])/, '\1-')
=> "1-3"

您可以從一些隨機測試開始:

def DashInsert(num)
  num_str = num.to_s
  num_str.gsub(/([13579])(?=[13579])/, '\1-')
end

10.times{
  x = rand(10000)
  puts "%6i: %6s" % [x,DashInsert(x)]
}

例:

9633:  963-3
7774: 7-7-74
6826:   6826
7386:  7-386
2145:   2145
7806:   7806
9499:  949-9
4117: 41-1-7
4920:   4920
  14:     14

現在檢查正則表達式。

  1. ([13579])取一個奇數並記住它(以后可以與\\1一起使用
  2. (?=[13579])檢查下一個數字是否也為奇數,但不要接受(仍保留在字符串中)
  3. '\\1-'向其輸出第一個奇數和ab a-。

換句話說:在每兩個奇數之間插入一個-

暫無
暫無

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

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