From: Urabe Shyouhei Date: 2010-10-22T20:43:33+09:00 Subject: [ruby-dev:42446] Re: 正規表現に半角スペースが混じっている際の挙動 とりあえず、べき論のところはさておいて、何が起こってるかだけ解説します (2010/10/22 19:55), Akira Matsuda wrote: > # 1.9.3dev (2010-10-22 trunk 29555) > % ruby -e "'hoge'.scan / /" > -e:1: unterminated regexp meets end of file これは最初の / が割り算だと判定されています、つまり ('hoge' . scan) / (/ #EOF でunterminated regexp meets end of fileです。 > # カッコを付ければエラーにならない > % ruby -e "'hoge'.scan(/ /)" > #=> OK かっこの直後には割り算記号が来ないことを判定する程度には賢いということですね > # エスケープすればエラーにならない > % ruby -e "'hoge'.scan /\ */" > #=> OK これはエスケープされたので/\ */というtokenになったので割り算じゃないねと分かります > # 米が混ざるとこんな感じ > % ruby -e "'hoge'.scan / */" > -e:1: syntax error, unexpected tSTAR > 'hoge'.scan / */ > ^ > -e:1: unterminated regexp meets end of file > -e:1: syntax error, unexpected $end, expecting tCOLON2 or '[' or '.' これは最初の/が割り算に食われて、次の*はsplatだと思われています。 ('hoge' . scan) / (* (/ #EOF > もしかして、基本的にはスペース記号はエスケープしておくのが正しいんでしょうか? 個人的には%rで逃げますね。 zsh % ruby -wce "'hoge'.scan %r/ */" Syntax OK