I don't have the book in front of me right now, but I think the problem is either in the way the question is written or your interpretation of it.

It's not quite correct to state that /"([^"]*)"/ should not match "hello"you". In fact, it should match -- specifically, it should match the "hello" part. By default, regexes are not anchored, and the match operator will return true if the pattern matchs any part of the bound string. If you want to anchor the regex -- in other words, if you want it to match something in its entirity -- you need to explicitly specify ^ and $ modifiers.

For example, the regex /^"([^"]*)"$/ will behave the way you seem to be expecting, because it means essentially "match a something enclosed by quotes, with nothing else before or after it.

The reason your one-liner is behaving the way it does is because you're not creating exactly the string you think. This statement:
$a = "hello\"you"

actually creates a string whose contents are hello"you with no quotes before and after -- because the quotes are used to delimit the string literal in the first place. If you tried this:

$a = "\"hello\"you\""

or (more readable) this:

$a = q{"hello"you"}

you'd get the result you expect.

(If you're not familiar with the q{xxx} syntax, it effectively means "single-quote xxx". qq{xxx} does the same with double-quotes. You can use a wide variety of delimiters where I've used curly brackets -- this is a great way to avoid having to escape characters inside string literals.)


In reply to Re: Problem with regex from Learning Perl (3rd edition) by seattlejohn
in thread Problem with regex from Learning Perl (3rd edition) by slocate

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.