in reply to Regular Expression: search two times for the same number of any signs

Hi,

What's unclear is whether this string is allowed to be embedded inside a longer string, although your example regexes seem to suggest that it's ok. Second, it would be good to know if multiple of these x.x.x sequences are allowed to be present in the source string? Should "ax1x2xbx34x56xc" return two strings, "x1x2x" and "x34x56x", or the single string "x1x2xbx34x56x"?

Here's my TIMTOWTDI solution:

print "$_ => ", extract($_)//'invalid', "\n" for qw/ xxx x.x.x x12x..x x123x...x x1x2x...x x123x.x.x x12x1x ax1x2xbx34x56xc /; sub extract { my ($x) = shift=~/(x.*x.*x)/; return unless length($x)%2 && substr($x,(length($x)-1)/2,1) eq 'x'; return $x; } __END__ xxx => xxx x.x.x => x.x.x x12x..x => x12x..x x123x...x => x123x...x x1x2x...x => x1x2x...x x123x.x.x => x123x.x.x x12x1x => invalid ax1x2xbx34x56xc => x1x2xbx34x56x

Hope this helps,
-- Hauke D

Replies are listed 'Best First'.
Re^2: Regular Expression: search two times for the same number of any signs
by Anonymous Monk on Nov 29, 2016 at 11:02 UTC
    yes. The pattern can be in a larger string.
    ax.x.x # is valid ax.x.xaa # is valid
    yes. The pattern x.x.x is allowed to be multiple times in the string. But it is enough to find it at least one time.
Re^2: Regular Expression: search two times for the same number of any signs
by Anonymous Monk on Nov 29, 2016 at 11:38 UTC

    Hi Hauke,

    Took me a while to understand your code !! I can learn a lot out of it. Thanks !!!

    But one question: I never saw // before. What is // ?

    You use "extract($_)//'invalid'" to print 'invalid' if the sub returns nothing.

    Can I do more with // ?

      It's the defined-or operator. See perlop for full details.