views:

176

answers:

3

Is there an existing robust Java library which implements a fairly substantial subset of Perl regular expression syntax?

Background:

I wish to implement a file renamer where renaming is done using Perl regular expressions.

The trick is that the project containing said renamer as a component is, currently, 100% in Java in Windows.

NOTES:

I am setting aside the obvious workaround of "install Strawberry Perl; write the whole renamer in Perl (or teach Perl to the developer doing Java coding), pass a list of files to rename to the Perl renamer script via a system call from Java" as too crafty and too obvious :)

Also, please don't offer comparisons of how Java's latest and greatest RegEx engine is already good enough to do most of what Perl RegEx does - I'm fairly aware of its functionality (and can google); thus I already know that said statement might even be true; it is, however, irrelevant to my interest in seeing real Perl RegEx syntax implemented as a Java library.

+6  A: 

Have you tried JRegex? It boasts Perl 5.6 compatibility and doesn't have the worries of linking PCRE in directly.

Pestilence
Thanks! Would you happen to know how (a) robust and (b) fast is it?
DVK
~10% faster than java.util.regex, much slower than native Perl.
Pestilence
Should be fairly robust. Haven't tested it for named grouping or anything.
Pestilence
Sux re: performance. I'm probably just going to batch off the list of strings and regexes and call a Perl script on the batch then... +1 nevertheless for excellent suggestion!
DVK
+5  A: 

For maximum Perl compatibility you would need to actually use Perl. You can do that using Inline::Java::Callback, which is distributed as part of the Inline::Java module.

See also: How can I call Perl from Java?

Michael Carman
+3  A: 

The library you are looking for is the Apache ORO library, it is specifically implemented to handle Perl5 regular expressions.

rsp
Just as a note, the stable version only supports Perl5.003 as per their docs. But a good option nonetheless!
DVK