2016-04-22 7 views
-1

以下の仕組みの理解には助けが必要です。 Rubyで入力にメタ文字を含むgsubがどのように機能するか

"middl'-.*$%ddlemiddlemiddlemiddlemiddlemiddlemiExcess".gsub(/[^a-zA-Z'-.]/, '') 
# => "middl'-.*ddlemiddlemiddlemiddlemiddlemiddlemiExcess" 

"middl'-.*$%ddlemiddlemiddlemiddlemiddlemiddlemiExcess".gsub(/[^a-zA-Z.'-]/, '') 
# => "middl'-.ddlemiddlemiddlemiddlemiddlemiddlemiExcess" 

私は/[^a-zA-Z'-.]/を与える

は、その後、スターは削除されませんが、2番目の例では、星が削除されます。どうして?

私は手紙(a-zA-Z)のみを持つようにgsub後に結果を望んで存在する、ピリオド(.)、ハイフン(-)、単一apostphe(')。正規表現内でのピリオドの位置を変更するだけで出力が異なりますか?

+0

これはおそらくあなたを助けるかもしれません:https://bneijt.nl/pr/ruby-regular-expressions/ – Alfie

答えて

3

/[^a-zA-Z'-.]/ハイフンは、前にA-Zのように範囲の区切り文字として扱われます。範囲は:

▶ ("'"..'.').to_a 
#⇒ ["'", "(", ")", "*", "+", ",", "-", "."] # note asterisk 

/[^a-zA-Z.'-]/にハイフンが最後のシンボルであり、従って、それはハイフン自体として扱われます。

+0

ありがとう。とった。 – user2844265

関連する問題