fglock / Perlito

"Perlito" Perl programming language compiler
http://fglock.github.io/Perlito/
Other
414 stars 47 forks source link

Perlito java regexps whitespace mismatch with /[a b]/x #40

Closed potyl closed 8 years ago

potyl commented 8 years ago

This is more of a reminder as Flavio is already aware that Perl and Java behave differently when dealing with /[a b]/x. In Perl that regexp is equivalent to /[a b]/ while in Java it is equivalent to /[ab]/.

This tends to break even more when we use /[ ]/x to refer to /\ /.

Sample file:

my $input = 'a b c';
my $regexp_string = qq{a [ ] b \\s c};
print "Trying '$input' =~ /$regexp_string/x\n";
$input =~ /$regexp_string/x or die "Failed regexp string: '$input' =~ /$regexp_string/x";
print "Ok '$input' =~ /$regexp_string/x\n";

Perl output:

Trying 'a b c' =~ /a [ ] b \s c/x
Ok 'a b c' =~ /a [ ] b \s c/x

Java output:

Trying 'a b c' =~ /a [ ] b \s c/x
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 11
a [ ] b \s c
           ^
    at java.util.regex.Pattern.error(Pattern.java:1955)
    at java.util.regex.Pattern.clazz(Pattern.java:2548)
    at java.util.regex.Pattern.sequence(Pattern.java:2063)
    at java.util.regex.Pattern.expr(Pattern.java:1996)
    at java.util.regex.Pattern.compile(Pattern.java:1696)
    at java.util.regex.Pattern.<init>(Pattern.java:1351)
    at java.util.regex.Pattern.compile(Pattern.java:1054)
    at PlRegex.<init>(Main.java:1209)
    at Main.main(Main.java:3498)