anish_batra: Here is why your solution is broken in almost the same way as the original poster's code. This will be a slight oversimplification.

The regexp engine loves to find matches. It's its duty to find them. You are giving it all the tools it needs to match the following string:

$data = "Johnson%Andrew%BX321%Accountant";

Here's why:

But that's not what the OP actually wanted to have happen. He wanted strings like "Johnson%Andrew%AX321%Accountant" to pass, and "Johnson%Andrew%BX321%Accountant" to fail. You simply showed him another way to get the wrong result again. And, in fact, your solution results in some backtracking within the RE engine, so not only does it provide false positives, it does so inefficiently.

Either you didn't understand the question, or you did understand it, but didn't test your code. There's no shame in considering a solution that doesn't work. The problem is when it gets posted. This is the third or fourth answer in a row that you've provided which fails to meet the OP's simple requirements. My suggestion always test your code with a variety of possibly valid data-sets before posting answers... at least until accurate responses become second nature. To be honest, I'm still hesitant to post regexp responses until after I've tested them -- they're so easy to get wrong. But the lesson should be test your solutions before posting.

The Monastery welcomes learners. That's one of the biggest reasons we're here. We all started somewhere. And answering questions is a great way to consider new problems and to learn from them. I'm not suggesting that you refrain from answering. I'm suggesting (and as a fellow PerlMonk asking) that you test your code before posting it. One doesn't learn much from posting broken solutions. One learns by studying how to create a valid solution.

Furthermore, it does your fellow PerlMonks a disservice posting broken code. Sure, there's more than one way to do it. But another newcomer may not immediately recognize that your solutions have bugs, may use them, and may find out the hard way. That's not good for the user, for Perl, or for the Perl community.

One suggestion I have... if you're unsure about a solution, you might even consider chatting about it in the CB before posting it. Put it in your scratchpad and say, "Is [pad://anish_batra] a valid solution to [id://123456]?" If it's a good idea, post it. If it's wrong, the folks in the chatterbox will probably gladly explain why.


Dave


In reply to Re^2: Regex help needed by davido
in thread Regex help needed by ghosh123

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.