4

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.

8
  • How much is "fairly substantial"? The rest of your question reads like that would be in the 95% and above ballpark. Commented Dec 15, 2009 at 20:27
  • 2
    At the very least, you won't be able to get (?{ code }) support without a Perl interpreter. Commented Dec 15, 2009 at 20:28
  • 2
    Can you access PCRE (perl compatible regex) through JNI (Java Native Interface)? Not much of a Java hacker, so I don't know what's involved. Commented Dec 15, 2009 at 20:35
  • JNI to Perl... shudder. Worst of both worlds... Commented Dec 15, 2009 at 20:43
  • 1
    @DVK You would be writing C code that interfaces with both the JVM and the Perl engine. So you would need convert Java's String object into a char pointer, then convert that into a Perl SV structure, call the regexp function, get another SV back, then convert that back to a char pointer, and finally back into a String object. It could be done, but I do not think it would be worth the trouble. Commented Dec 15, 2009 at 20:58

3 Answers 3

7

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

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks! Would you happen to know how (a) robust and (b) fast is it?
~10% faster than java.util.regex, much slower than native Perl.
Should be fairly robust. Haven't tested it for named grouping or anything.
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!
5

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?

Comments

3

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

1 Comment

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.