[英]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
現在檢查正則表達式。
([13579])
取一個奇數並記住它(以后可以與\\1
一起使用 (?=[13579])
檢查下一個數字是否也為奇數,但不要接受(仍保留在字符串中) '\\1-'
向其輸出第一個奇數和ab a-。 換句話說:在每兩個奇數之間插入一個-
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.