将perl代码段转换为java
我想用java重写perl代码:将perl代码段转换为java,java,regex,perl,Java,Regex,Perl,我想用java重写perl代码: sub validate_and_fix_regex { my $regex = $_[0]; eval { qr/$regex/ }; if ($@) { $regex = rquote($regex); } return $regex; } sub rquote { my $string = $_[0] || return; $string =~ s/([^A-Za-z_0-9 "'\
sub validate_and_fix_regex {
my $regex = $_[0];
eval { qr/$regex/ };
if ($@) {
$regex = rquote($regex);
}
return $regex;
}
sub rquote {
my $string = $_[0] || return;
$string =~ s/([^A-Za-z_0-9 "'\\])/\\$1/g;
return $string;
}
代码获取一个正则表达式,如果它有转义字符,则修复它。我找不到eval{qr/$regex/}的任何替代方案和$string=~s/([^A-Za-z_0-9'\\])/\\$1/g;
。
- 对于
qr
,请签出,如果给定字符串不是有效的正则表达式,则会抛出PatternSyntaxException
- 有关
s//
,请查看
eval块
是用Java命名的
把它们放在一起:你想调用模式。在try-catch的主体中编译。如果你捕获了一个PatternSyntaxExpression,你会调用rquote,并在那里使用String.replaceAll
。什么是$1
?如何在String.replaceAll
中使用它?你知道你发布的原始perl中是什么吗?如果不是,那就从哪里开始,但这是一个不同的问题,我建议您阅读Perl的正则表达式(以及一般的正则表达式)。如果您确实理解了这一点,我不确定问题是什么——String.replaceAll文档链接到很多好的文档。原始代码在这里:第3000行。感谢帮助。$1
是捕获组。而String.replaceAll
不支持捕获组。它被用来代替replaceAll。String.replaceAll
绝对正确支持捕获组。“hello world”。replaceAll(“l(\\w)”,“\u$1”)
生成“he\u lo wor\u d”。