in reply to Re^3: Reliable way to detect base64 encoded strings
in thread Reliable way to detect base64 encoded strings

Regex are not my favorite part of Perl....even if they are powerful. I'm trying to use your way to detect if a string is base64...so I was taking what you had and putting an if around it. I'm sure I'm just not getting it....could you give me some pointers?

if($string_whole =~ m / ^ (?: [A-Za-z0-9+/]{4} )* (?: [A-Za-z0-9+/]{2} [AEIMQUYcgkosw048] = | [A-Za-z0-9+/] [AQgw] == )? \z /x ) $&Log ("it found base64-$i");
Thanks in advance for your expertise.

Replies are listed 'Best First'.
Re^5: Reliable way to detect base64 encoded strings
by ikegami (Patriarch) on Apr 16, 2010 at 05:05 UTC

    You have the right idea, but

    if (...) $&Log ("it found base64-$i");
    is not valid Perl. You want
    if($string_whole =~ m/ ^ (?: [A-Za-z0-9+/]{4} )* (?: [A-Za-z0-9+/]{2} [AEIMQUYcgkosw048] = | [A-Za-z0-9+/] [AQgw] == )? \z /x) { Log("$string_whole is valid base64"); }
      when I use it as you have it I get
      Unmatched [ in regex; marked by <-- HERE in m/ ^ (?: [ <-- HERE A-Za-z0-9+/ at C:\aaa\aeh_pop.pl line 153.
      I thought I was getting a problem with the regex...not the IF....but I didn't copy this in because i figured it was something I was doing. I see matched brackets... I tried to pull up into one line thinking the white space was giving issues...that didn't help. Thanks.
        Oops, mine wasn't valid Perl either! I used an unescape "/" in the pattern. Two solutions: escape it, or change the delimiter. I corrected the original post.