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

标签 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> 

我在这里错过了什么?任何帮助将不胜感激。干杯!

附言。

不过我可以分两步完成:

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

最佳答案

匹配注释和行尾

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

压缩后的正则表达式如下所示:

/^\s*(#|$)/

散文解释

\s* 表示可以匹配紧跟在行首之后的任意数量的空格,包括完全没有(\#|$) 使用 alternation , 因此括号内的任一模式都可以匹配。 注意:只有在使用 x option 时才需要反斜杠来转义注释符号, 忽略正则表达式中的空格和注释;如果您不使用 x,则不要使用反斜杠。

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

关于ruby - 正则表达式匹配文件中的空行和注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338100/

相关文章:

ruby - RVM screen 内部损坏

ruby - 'gmaps4rails' 未定义局部变量或方法 'acts_as_gmappable' rails 3.2.1 路由错误

ruby-on-rails - 在一行代码中初始化和递增变量

php - 从字符串中提取YouTube图像

ruby-on-rails - Ruby 每个循环用逗号分隔

ruby - 这两个 Ruby 片段有什么区别?

python re match exact only only occurrence(没有重复连续)

javascript - 用于从段落中删除所有属性的正则表达式

ruby-on-rails - 编译错误,意外的 kENSURE,预计 Rails 3 项目中出现 $end 错误

javascript - 从 Ruby 数组中获取特定值并创建逗号分隔的字符串