Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^4: check for square-number with a regex

by spx2 (Deacon)
on Oct 24, 2009 at 09:56 UTC ( [id://803019]=note: print w/replies, xml ) Need Help??


in reply to Re^3: check for square-number with a regex
in thread check for square-number with a regex

I think you're aware of this solution for anbncn but I'll post it anyway(it uses ??{} blocks and ?{} and is a Perl regex).
$r = qr/^(a+b)(?{ $a = -1+length $^N; })(??{ $b=$a-1;"(b{$b})" })(??{ +"(c{$a})" })/x; sub test { print $_[0] =~ $r ? "matched\n" : "not matched\n"; } test "aaabbbccc"; test "aaaabbbccc"; test "aaaabbbbccc"; test "aaaabbbbcccc"; test "aabbbbcccc"; test "abc"; test "aabbcc";
Result on Perl v5.8.8:
matched not matched not matched matched not matched matched matched

Replies are listed 'Best First'.
Re^5: check for square-number with a regex
by JavaFan (Canon) on Oct 24, 2009 at 11:54 UTC
    I (and others in this thread) explicitely mentioned no using (?{}) and (??{}). Allowing those means you have the full power of Perl available. It would mean that anything you can do in Perl, you can to with a "regular expression", and the question "can I do foo with a regular expression" becomes a non-question.

    And I would have used (?{}) differently anyway. Something like:

    /^(a+)(b+)(c+)$(?(?{length($1) == length($2) && length($2) == length($ +3)})|(*FAIL))/;
    But that's just a fancy way of writing:
    /^(a+)(b+)(c+)$/ && length($1) == length($2) && length($2) == length($ +3);
    And you can solve the "match a square" with:
    /^([0-9]+)$(?(?{sqrt($1) == int sqrt($1)})|(*FAIL))/;
    Or in general, match "whatever" by:
    /^(.*)$(?(?{is_whatever($1)})|(*FAIL))/;
    after writing the appropriate "is_whatever" function.

    But that means the question no longer is "how can I do foo with a regexp", but "how can I do foo in Perl".

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://803019]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (4)
As of 2024-03-29 00:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found