Ruby正则表达式:^匹配行的开头,即使没有m修饰符?

Ste*_*son 9 ruby regex

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)

我在这做错了什么?

Mat*_*ggs 20

  • 行的开头:^
  • 行结束:$
  • 字符串的开头:\ A.
  • 字符串的结尾:\ z


noo*_*odl 16

\A而不是^.

Ruby正则表达式参考:http://www.zenspider.com/ruby/quickref.html#regexen


Ala*_*ore 8

你的困惑是合理的.在大多数正则表达式中,默认情况下^相当于\A并且$等效\Z,并且您必须设置"多行"标志以使它们具有其他含义(即行边界).在Ruby中,^$ 始终匹配行边界.

为了增加混淆,Ruby有一种称为"多线"模式的东西,但它实际上是其他人所谓的"单行"或"DOTALL"模式:它改变了.元字符的含义,允许它匹配行分隔符字符(例如\r,\n)以及所有其他字符.