正则表达式匹配文件中的空行和注释

Mac*_*ers 1 ruby regex erb

阅读时如何忽略文件中的注释或空白/空行?我以为/^[\s#]*$/会做这个工作,但事实并非如此:

irb(main):180:0> open(inFile, 'r').each { |ln| puts ln if ln !~ /^[\s#]*$/ }
....
....
# and ..... ThIs Is A cOmMeNt .....
....
....
=> #<File:/tmp/running-instances.txt>
irb(main):181:0> 
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?任何帮助将受到高度赞赏.干杯!!

PS.

我可以分两步单独完成:

open(inFile, 'r').each { |ln| next if ln =~ /^\s*$/; puts ln if ln !~ /#[^#]*$/ }
Run Code Online (Sandbox Code Playgroud)

Tod*_*obs 9

匹配评论和行尾

/
  ^      # match start of line
  \s*    # match zero or more spaces
  (\#|$) # match comment symbol or end-of-line
/x
Run Code Online (Sandbox Code Playgroud)

压缩,正则表达式看起来像这样:

/^\s*(#|$)/
Run Code Online (Sandbox Code Playgroud)

散文解释

\s*意味着在行开始之后的任何数量的空白可以匹配.(\#|$)使用交替,所以括号内的任何一个模式都可以匹配.注意:只有在使用x 选项时才需要使用反斜杠来转义注释符号,这会忽略正则表达式中的空格和注释; 如果你没有使用,x那么留下反斜杠.

因此,模式将匹配行首和后跟可选空格,然后必须紧跟注释符号或行尾.因为匹配是锚定的,所以它匹配字符串"foo # bar"," Array#string\n"因为它们不匹配所需的模式.