2016-02-12 114 views

回答

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"] 
+2

關閉 - 點的'[ ]'是擴展'\ w'的含義以包含'-'字符。 –

+0

謝謝,是的,[]是找到匹配\ w之前和之後 - – zee

5

的方括號試圖[]表示一個字符類。一個角色類將會匹配裏面的任何東西。

\w是一個叫做「單詞字符」的特殊類。這是[a-zA-Z0-9_]簡寫,所以它會匹配:

  • a-z(小寫字母)
  • A-Z(全部爲大寫字母)
  • 0-9(所有數字)
  • _(下劃線)

您提問的課程[\w-]是由\w和0123組成的類。所以它會匹配上面的列表,加上連字符(-)。

和正確的寫法一樣,[\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