我检查了文档,找不到[\w-]
的含义。谁能告诉我[\w-]
在Ruby中意味着什么?
答案 0 :(得分:12)
方括号[]
表示字符类。字符类将匹配其中的任何内容。
\w
是一个名为"字符"的特殊类。它是[a-zA-Z0-9_]
的简写,因此它将匹配:
a-z
(全部小写字母)A-Z
(全部大写字母)0-9
(所有数字)_
(下划线)您要问的课程[\w-]
是由\w
和-
组成的课程。因此它将匹配上面的列表,加上连字符(-
)。
正如所写,[\w-]
,此正则表达式将匹配单个字符,只要它在上面的列表中,或者是破折号。
如果您要在结尾添加量词,例如[\w-]*
或[\w-]+
,然后它会匹配以下任何字符串:
fooBar9
foo-Bar9
foo-Bar-9
-foo-Bar---9abc__34ab12d
它会部分匹配这些:
foo,Bar9 # match 'foo' - the ',' stops the match
-foo-Bar---9*bc__34ab12d # match '-foo-Bar---9', the '*' stops the match
答案 1 :(得分:0)
\w Any word character (letter, number, underscore)
以下是我的想法:转到Rubular并按以下方式尝试:
regex_1 /\w-/
String : f-oo
regext_1只会与f-
匹配,并会在-
处停止,忽略任何\w
..其余字符串oo
鉴于:
regex_2 /[\w-]/
string : f-oo
regex_2将匹配整个字符串加上特殊字符 - .. f-oo
..另外,测试了字符串类似f-1oo
的情况,第二个正则表达式停止了f-
的匹配因此,-
后跟\d
==========
我相信[]的重点是在-
之前和之后继续匹配。以下是我在irb.
irb(main):004:0> "blah-blah".scan(/\w-/)
=> ["h-"]
irb(main):005:0> "blah-blah".scan(/[\w-]/)
=> ["b", "l", "a", "h", "-", "b", "l", "a", "h"]
irb(main):006:0> "blah-blah".scan(/\w-\w/)
=> ["h-b"]
irb(main):007:0> "blah-blah".scan(/\w-\w*$/)
=> ["h-blah"]
irb(main):008:0> "blah-blah".scan(/\w*-\w*$/)
=> ["blah-blah"]