\K
否定的な後読みではなく、使用する必要があります。これにより、正規表現を大幅に簡素化できます。事前定義された配列、キャプチャ グループ、またはブロックは必要ありません。
\K
「これまでに一致したものをすべて破棄する」ことを意味します。ここで重要なのは\K
、(Ruby や他のほとんどの言語では) 可変長の一致は (負または正の) 後読みでは許可されないのに対し、可変長の一致は の前に置くことができるということです。
r = /
[^0-9a-zA-Z#] # do not match any character in the character class
\#+ # match one or more pound signs
\K # discard everything matched so far
[a-zA-Z]+ # match one or more letters
/x # extended mode
拡張モードで正規表現を作成していない場合は、エスケープする必要はありませ#
ん。\#+
"two hashs##in middle of word#".scan r
#=> []
"two hashs&#in middle of word#".scan r
#=> ["in"]
"two hashs#in middle of word&#abc of another word.###def ".scan r
#=> ["abc", "def"]