正则表达式[\ w-]是什么意思?

时间:2016-02-12 02:29:01

标签: ruby regex

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

2 个答案:

答案 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"]