Ruby 为什么在“#”之后的正则表达式模式中不允许“/”?

Ruby 为什么在“#”之后的正则表达式模式中不允许“/”?,ruby,regex,literals,Ruby,Regex,Literals,x选项可用于格式化正则表达式,使其更具可读性并引入注释。所以我试着: my_pattern = / #dummy pattern to match everything .* #/ <-- offending character /x 这是什么意思?我以为之后的一切都被忽略了。简短回答 Ruby解释器锯 my_pattern = /whatever/ <-- offending character /x 另一种方法,正如Uri Agassi所建议的,是使用另一种方法,通

x
选项可用于格式化正则表达式,使其更具可读性并引入注释。所以我试着:

my_pattern = / #dummy pattern to match everything
  .*  #/ <-- offending character
  /x
这是什么意思?我以为
之后的一切都被忽略了。

简短回答 Ruby解释器锯

my_pattern = /whatever/ <-- offending character
/x
另一种方法,正如Uri Agassi所建议的,是使用另一种方法,通过使用
%r{}
表单将正则表达式包装为
/

pattern = %r{ .* #/ <-- offending character }x
正如预期的那样,Ruby等待更多的代码

irb(main):002:0/ .*  #/ <-- offending character
SyntaxError: (irb):2: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('
    from /usr/bin/irb:11:in `<main>'
什么是无效的Ruby代码

Ruby解释器从
.rb
文件或
irb
读取相同的内容

如果您需要在注释中包含
/
,请在ruby解释器的第一个过程中转义它,即

irb(main):003:0> my_pattern = / #dummy_patter to match everything
irb(main):004:0/ .*  #\/ <-- offending character
irb(main):005:0/ /x
=> / #dummy_patter to match everything
.*  #\/ <-- offending character
/x
irb(main):003:0>my_pattern=/#dummy_pattern以匹配所有内容
irb(主):004:0/*\/\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
.*\/my\u模式。匹配(“匹配我!”)
=> #

您的正则表达式中的注释是您的字面意思,还是仅在这个问题中添加?如果是后者,那就很混乱了。不要把解释写成注释,把它写成文本。我的真实代码中有
#TODO^或/
。根据:“…octothorpe(#)字符在行尾引入注释”@Stefan:仅在代码中。但不是在
字符串
文本中,例如,也不是在
Regexp
文本中。在
String
Regexp
文本中,它只是一个字符。@JörgWMittag引用自
Regexp
文档中的“自由间距模式和注释”部分。您可以使用
%r{}
表单使用
包装regex,也可以使用另一种方式:
模式=/r>{.*.#/…或
Regexp.new('.*#/
irb(main):001:0> my_pattern = / #dummy_pattern to match everything
irb(main):002:0/ .*  #/ <-- offending character
SyntaxError: (irb):2: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('
    from /usr/bin/irb:11:in `<main>'
 <-- offending character
irb(main):003:0> my_pattern = / #dummy_patter to match everything
irb(main):004:0/ .*  #\/ <-- offending character
irb(main):005:0/ /x
=> / #dummy_patter to match everything
.*  #\/ <-- offending character
/x
irb(main):006:0> my_pattern.match("match me!")
=> #<MatchData "match me!">