3

次の文字列があります。

Eclipse Developments (Scotland) Ltd t/a Martin & Co (Glasgow South)

最後の (常に最後ですが、唯一の) ブラケット値を取得する必要があるため、この場合は "Glasgow South" です。

使用する必要があることはわかっています.subが、正しい正規表現を解決できません。

4

2 に答える 2

22

通常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.
于 2012-06-12T16:24:14.860 に答える
2

正規表現は貪欲です。お求めいただければ.*、可能な限り対応させていただきます。そのため、次のように動作します。

test = "Eclipse Developments (Scotland) Ltd t/a Martin & Co (Glasgow South)"
test =~ /.*\((.*)\)/
answer = $1
# => "Glasgow South"
于 2012-06-12T16:26:47.580 に答える