Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将perl代码段转换为java_Java_Regex_Perl - Fatal编程技术网

将perl代码段转换为java

将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 "'\

我想用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 "'\\])/\\$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”。