Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

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

by spx2 (Chaplain)
on Oct 24, 2009 at 09:56 UTC ( #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


Comment on Re^4: check for square-number with a regex
Select or Download Code
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
Node Status?
node history
Node Type: note [id://803019]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2014-11-01 11:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (229 votes), past polls