#!/usr/bin/perl -- use strict; use warnings; use Data::Dump; my $jp = do { use Regexp::Grammars; qr{ # Keep the big stick handy, just in case... #~ # Match this... ^ | $ | (?: \x5B ) (?: \x7B ) (?: \x5D ) (?: \x7D ) (?: \x3A ) (?: \x2C ) (?: \x20 | \x09 | \x0A | \x0D )* | | | | | | \x66\x61\x6c\x73\x65 \x6e\x75\x6c\x6c \x74\x72\x75\x65 (?: (?: (?: (?: (?: ) )* ) )? ) (?: ) (?: (?: (?: (?: (?: ) )* ) )? ) (?: (?: )? (?: )? (?: )? ) \x2E [\x{31}-\x{39}] \x65 | \x45 (?: (?: | )? (?: )+ ) (?: (?: )+ ) | (?: (?: )* ) \x2D \x2B \x30 (?: (?: )* ) | (?: \x22 | \x5C | \x2F | \x62 | \x66 | \x6E | \x72 | \x74 | (?: \x75 (?: ){4} ) ) \x5C \x22 [\x{20}-\x{21}] | [\x{23}-\x{5B}] | [\x{5D}-\x{10FFFF}] | A | B | C | D | E | F [\x{30}-\x{39}] }ixs}; for my $str( q/[false,true,null]/ , ){ print "#<<@{[time-$^T]}# $str \n"; if( $str =~ $jp ){ dd(\%/) ; #/ } else { print "## fail to match \n"; } print "#>>@{[time-$^T]}#\n"; }