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
)以及所有其他字符.
归档时间: |
|
查看次数: |
11831 次 |
最近记录: |