正则表达式是什么意思?

我检查了文档,找不到[\w-]含义。 谁能告诉我[\w-]在Ruby中意味着什么?

方括号[]表示字符类 。 一个字符类将匹配其中的任何内容。

\w是一个名为“单词字符”的特殊类。 它是[a-zA-Z0-9_]简写,因此它将匹配:

  • az (全小写字母)
  • AZ (全部大写字母)
  • 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 
 \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.

 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/) => ["hb"] irb(main):007:0> "blah-blah".scan(/\w-\w*$/) => ["h-blah"] irb(main):008:0> "blah-blah".scan(/\w*-\w*$/) => ["blah-blah"]