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

Ada*_*Lee 6 ruby regex

我查了一下文档,找不到什么[\w-]意思.谁能告诉我[\w-]Ruby中有什么意义?

Dan*_*owe 15

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

\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
Run Code Online (Sandbox Code Playgroud)

它会部分匹配这些:

foo,Bar9                    # match 'foo' - the ',' stops the match
-foo-Bar---9*bc__34ab12d    # match '-foo-Bar---9', the '*' stops the match
Run Code Online (Sandbox Code Playgroud)


zee*_*zee 1

\w  Any word character (letter, number, underscore)
Run Code Online (Sandbox Code Playgroud)

这是我认为它正在做的事情:转到Rubular并尝试如下:

正则表达式_1/\w-/

String : f-oo 
Run Code Online (Sandbox Code Playgroud)

regext_1 只会匹配并且会在忽略任何 .. 字符串的其余部分f- 时停止-\woo

然而 :

正则表达式_2 /[\w-]/

string : f-oo
Run Code Online (Sandbox Code Playgroud)

regex_2 将匹配整个字符串加上特殊字符 - .. f-oo

.. 另外,还测试了类似 的字符串的情况f-1oo,第二个正则表达式在 因此停止了匹配f--后面跟着一个\d

=========

我相信 [] 的全部意义在于继续匹配 before 和 after -。这是我尝试过的一些变化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"]
Run Code Online (Sandbox Code Playgroud)

  • 关闭 - `[]` 的目的是扩展 `\w` 的含义以包含 `-` 字符。 (2认同)