次の文字列があります。
Eclipse Developments (Scotland) Ltd t/a Martin & Co (Glasgow South)
最後の (常に最後ですが、唯一の) ブラケット値を取得する必要があるため、この場合は "Glasgow South" です。
使用する必要があることはわかっています.sub
が、正しい正規表現を解決できません。
通常sub
は代用に使用されます。必要なものは次のscan
とおりです。
test = "Eclipse Developments (Scotland) Ltd t/a Martin & Co (Glasgow South)"
test.scan(/\(([^\)]+)\)/).last.first
# => "Glasgow South"
.last.first
奇妙な呼び出しの理由は、scan
デフォルトで配列の配列を返すことです。最後の一致の最初の (そして唯一の) 要素が必要です。
その正規表現を翻訳します。これは、初心者にとって厄介な場合があります。
\( # A literal bracket followed by...
( # (Memorize this)
[^)]+ # One or more (+) characters not in the set of: closing-bracket [^)]
) # (End of memorization point)
\) # ...and a literal closing bracket.
正規表現は貪欲です。お求めいただければ.*
、可能な限り対応させていただきます。そのため、次のように動作します。
test = "Eclipse Developments (Scotland) Ltd t/a Martin & Co (Glasgow South)"
test =~ /.*\((.*)\)/
answer = $1
# => "Glasgow South"