ruby正则表达式选项'n'有什么作用?

ruby正则表达式选项'n'有什么作用?,ruby,regex,Ruby,Regex,我正在用ruby阅读这一行: 我没有看到中描述的n选项。它有什么作用?为了正确地测试,我需要一个HTTP服务器来返回1xx响应。所以我还不能做。但它看起来像一只虫子。sock.readline将返回类似于的“HTTP/1.1 200 OK\r\n”,这与RE不匹配。如果选项是m,那么它会更有意义。我想知道这是否是一些未经测试的代码路径,是否有人使用了nvsm。如果是这种情况,n为什么没有失败?我尝试了其他随机字母,但都失败了。请参阅一些简单的测试: "HTTP/1.1 200 OK\r\n" =

我正在用ruby阅读这一行:

我没有看到中描述的
n
选项。它有什么作用?为了正确地测试,我需要一个HTTP服务器来返回1xx响应。所以我还不能做。但它看起来像一只虫子。
sock.readline
将返回类似于
的“HTTP/1.1 200 OK\r\n”
,这与RE不匹配。如果选项是
m
,那么它会更有意义。我想知道这是否是一些未经测试的代码路径,是否有人使用了
n
vs
m
。如果是这种情况,
n
为什么没有失败?我尝试了其他随机字母,但都失败了。请参阅一些简单的测试:

"HTTP/1.1 200 OK\r\n" =~ /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)(?:\s+(.*))?\z/im
#=> 0
"HTTP/1.1 200 OK\r\n" =~ /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)(?:\s+(.*))?\z/in
#=> nil
"HTTP/1.1 200 OK\r\n" =~ /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)(?:\s+(.*))?\z/iz
#=> SyntaxError: (eval):2: unknown regexp option - z

在文档中向下滚动一点,您会发现:
/pat/n-ASCII-8BIT


这将否决当前源代码编码(默认UTF-8)

//n
表示
NOENCODING
。从Ruby测试中:

def test_has_NOENCODING
  assert Regexp::NOENCODING
  re = //n
  assert_equal Regexp::NOENCODING, re.options
end

因此,它必须意味着忽略所有多字节字符序列,并将所有内容都视为原始字节。

hmm,为遗漏此内容而感到尴尬:/,谢谢。
def test_has_NOENCODING
  assert Regexp::NOENCODING
  re = //n
  assert_equal Regexp::NOENCODING, re.options
end