Markus Schirp
9/29/2008 7:07:00 AM
On Mon, Sep 29, 2008 at 01:49:23PM +0900, Daniel DeLorme wrote:
> Markus Schirp wrote:
>> So my Regexp is like:
>> "Match any character from the begin to the end of a string witch is not
>> newline, and ensure there is at least one character, and to this match
>> over multiple lines (so if there are multiple lines reject it)"
>> Results in /^[^\n]+$/m
>> My ruby 1.8.6 does:
>> /^[^\n]+$/m =~ "a\n" -> 0
>> without multiline flag the same:
>> /^[^\n]+$/ =~ "a\n" -> 0
>
> The multiline flag only changes the meaning of "." to include the \n
> character. It doesn't change the meaning of ^ and $ which mean respectively
> "beginning of line" and "end of line". True true "beginning of string"
> metacharacter is not ^ but \A, and for "end of string" it's not $ but \z
> (or \Z if you want to allow a trailing \n on your string)
>
> >> "a\nb\n"[ /^.*$/ ]
> => "a"
> >> "a\nb\n"[ /\A.*\z/ ]
> => nil
> >> "a\nb\n"[ /\A.*\z/m ]
> => "a\nb\n"
>
> Yeah, it's tricky.
>
> --
> Daniel
>
Thx, it works now!