in reply to need help with a Regex

Peamasii,
I am terrible at regexes myself, but it seems like an anchored character class with an ungreedy quantifier would do the trick.
/^[\d?]?$/

Cheers - L~R

After reading dragonchild's reply, I have to agree - reading perldoc perlre, checking the Categorized Questions and Answers, and Super Searching are always good places to start. It is like the saying goes Give a man a fire and he stays warm for the day, set a man on fire and he is warm for the rest of his life give a man a fish and he is full for a day, teach a man to fish and he never goes hungry.

Replies are listed 'Best First'.
Re^2: need help with a Regex
by Dietz (Curate) on Oct 06, 2004 at 15:32 UTC
    L~R, you are right with using anchors to limit the scope.
    But your solution would only match a single digit instead of a number (not what the OP wanted).

    One solution would be (not documented as of dragonchild's post):
    /^(\d+|\?)?$/

    ++ for the right approach
    Monkish Greetings,
    Dietz
      Dietz,
      But your solution would only match a single digit instead of a number (not what the OP wanted). emphasis mine

      Well see here is the quandry. You have interpreted it one way and I have another. Peamasii didn't define what exactly s/he meant by number. It could mean a single digit as I used, it could mean an integer which you described (which will match 0004 and miss -4 btw), or it could mean any number (pun intended) of things. For instance:

      use Scalar::Util 'looks_like_number'; if ( looks_like_number( $foo ) && $foo =~ /^\??$/ ) {...}
      It is probably as common a mistake to assume what you are thinking is universally understood when asking questions as it is for the person that is answering to assume they know what you mean. I think we both fall into the latter category this time.

      Cheers - L~R

        L~R, you are right again.
        Didn't see it the way you described, especially when it comes to numbers with a minus before.

        I was just recognizing the single digit match. And I was hesitating to post anyways (as of dragonchild's post above)

        And I really didn't mean to offend you, I have great respect for you - as I have for most other monks here.

        Respect, Dietz
        Well, numbers fall into so many possible formats that it's impossible to catch them all. I'm going to assume that any integer or decimal format is allowed, and write the following:
        foreach (<DATA>) { print $_ if $_ =~ /^(\?|-?\d*\.?\d+)?$/; } __DATA__ ? 3 3.3 .3 -3 -3.3 -.3 ? 3-3 -
      You probably don't need the capturing parens. I'd write it as
      /^(?:\d*|\?)$/
      where the empty string is just a zero digit number, but that's just me.