阅读时如何忽略文件中的注释或空白/空行?我以为/^[\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)
/
^ # 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"因为它们不匹配所需的模式.