Ruby 1.8.7.我正在使用带有^的正则表达式来匹配字符串开头的模式.问题是,如果在字符串中的任何行的开头找到模式,它仍然匹配.如果我使用'm'修饰符,这是我期望的行为,但我不是:
$ irb
irb(main):001:0> str = "hello\ngoodbye"
=> "hello\ngoodbye"
irb(main):002:0> puts str
hello
goodbye
=> nil
irb(main):004:0> str =~ /^goodbye/
=> 6
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
你的困惑是合理的.在大多数正则表达式中,默认情况下^相当于\A并且$等效\Z,并且您必须设置"多行"标志以使它们具有其他含义(即行边界).在Ruby中,^并$ 始终匹配行边界.
为了增加混淆,Ruby有一种称为"多线"模式的东西,但它实际上是其他人所谓的"单行"或"DOTALL"模式:它改变了.元字符的含义,允许它匹配行分隔符字符(例如\r,\n)以及所有其他字符.