.格苏和.扫描导轨.正则表达式破译



为什么会这样:

filename
=> "/Users/user/Desktop/work/arthouse/digitization/in-process/cat.jpg"
[4] pry(DigitizedView)> filename.gsub(/.*//,'')
=> "cat.jpg"

gsub的第一个参数中的正则表达式是什么?我知道.*是任意数量的任何字符...但是反斜杠是什么?为什么它会删除除cat.jpg部分之外的所有内容?

"cat.jpg".scan(/(w+)-(d+)([a-z]?)/)
=> []

该代码在做什么?

让我们来看看gsub方法的第一个参数是什么意思,/.*//

第一个和最后一个斜杠/.../表示我们在这里处理的是正则表达式,而不是字符串。

此正则表达式有两个部分。 .*/ .

.*说 grep 任何字符,包括空字符。

/说 grep 一个带斜杠的字符串,/ .

这个正则表达式会捕获,

['/', 'Users/', 'user/', 'Desktop/', 'work/', 'arthouse/', 'digitization/', 'in-process/']

所有这些字符串现在都替换为"。

除了末尾没有斜杠cat.jpg

希望解释有所帮助。

  • 编辑

在第二部分中,/(w+)-(d+)([a-z]?)/

(w+):grep 一组单词字符(包括数字) - : 破折号的格雷普 (d+):grep 一组数字 ([a-z]?) : grep 表示零字符或单个字符。

cat.jpg 在很多方面都不适合这个正则表达式。没有破折号,.在字符串中。等。

因此,scan将返回一个空数组。

正则表达式/.*//匹配以正斜杠结尾的零个或多个字符。String#gsub 方法将匹配模式的所有子字符串替换为替换值,在本例中为 ''

所以在这种情况下,模式匹配以下子字符串:'/''Users/''user/''Desktop/''work/''arthouse/''digitization/''in-process/'。它用一个空白字符串替换其中的每一个。它与剩余的子字符串不匹配,cat.jpg ,因为该子字符串不会以 '/' 终止。剩下的就是'cat.jpg'了。

最新更新