11

Rubyのこれら2つ(String#scanと)の違いは何ですか?String#split

4

1 に答える 1

21

それらは完全に異なる目的を果たします。 String#scanは、文字列から正規表現の一致を抽出し、配列内の一致を返すために使用されString#splitますが、区切り文字に基づいて文字列を配列に分割することを目的としています。区切り文字は、静的文字列(;単一のセミコロンで分割するなど)または正規表現(/\s/+空白文字で分割するなど)のいずれかです。

の出力にString#splitは区切り文字が含まれていません。むしろ、区切り文字を除くすべてが出力配列に返されますが、の出力にString#scanは区切り文字と一致するもののみが含まれます。

# A delimited string split on | returns everything surrounding the | delimiters
"a|delimited|string".split("|")
# Prints: ["a", "delimited", "string"]

# The same string scanninng for | only returns the matched |
"a|delimited|string".scan("|")
# Prints: ["|", "|"]

上記の両方は、単純な文字列の代わりに正規表現も受け入れます"|"

# Split on everything between and including two t's
"a|delimited|string".split(/t.+t/)
# Prints: ["a|delimi", "ring"]

# Search for everything between and including two t's
"a|delimited|string".scan(/t.+t/)
# Prints: ["ted|st"]
于 2012-10-13T20:54:59.557 に答える