Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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
用Java验证PCRE_Java_Regex_Validation_Pcre - Fatal编程技术网

用Java验证PCRE

用Java验证PCRE,java,regex,validation,pcre,Java,Regex,Validation,Pcre,给定一个字符串,如何在Java中验证内容是否是有效的PCRE?我不想在Java中以任何方式使用正则表达式,只是验证它的内容 几乎已经足够好了,但是它的javadoc指出了它与Perl的区别 具体而言,有一个包含3个相关组件的系统: 组件A—生成与Perl兼容的正则表达式(PCREs),由能够执行PCREs的其他组件(组件C)在运行时进行计算。这里“生成”的东西可能来自人类 组件B—验证由组件A生成的数据,如果有效,则将其传送到运行时(组件C) 组件C—一些计算PCREs的运行时。这可以是Perl

给定一个字符串,如何在Java中验证内容是否是有效的PCRE?我不想在Java中以任何方式使用正则表达式,只是验证它的内容

几乎已经足够好了,但是它的javadoc指出了它与Perl的区别

具体而言,有一个包含3个相关组件的系统:

  • 组件A—生成与Perl兼容的正则表达式(PCREs),由能够执行PCREs的其他组件(组件C)在运行时进行计算。这里“生成”的东西可能来自人类
  • 组件B—验证由组件A生成的数据,如果有效,则将其传送到运行时(组件C)
  • 组件C—一些计算PCREs的运行时。这可以是Perl VM、使用等的本机进程,或者其他可以编译/执行符合Perl的正则表达式的程序
  • 现在,组件B是用Java实现的。如上所述,它需要验证可能包含PCRE的字符串,但不需要执行它

    我们怎么能那样做

    一种选择是:

    public static boolean isValidPCRE(String str) {
        try {
            Pattern.compile(str);
        } catch (PatternSyntaxException e) {
            return false;
        }
    
        return true;
    }
    
    问题在于,
    java.util.regex.Pattern
    设计用于使用不完全符合Perl的正则表达式语法。javadoc非常清楚地说明了这一点

    因此,给定一个字符串,如何验证内容是否是Java中的有效PCRE


    注意:和Perl之间有一些区别,但它们很小。在某种程度上,Java的语法也是如此。但是,问题仍然存在。

    您必须为PCRE正则表达式语法编写解析器(或使用),或者直接通过JNE使用PCRE库(或调用Perl脚本)。请注意boost::regex不支持完整的Perl语法。听起来像是对我的回答:)你能告诉我关于boost.regex不支持完整Perl语法的更多细节的文档吗。我在图书馆文档中没有看到,但可能没有看到。更一般地说,似乎到处都是这样。我想我现在的问题是更多地验证字符串内容是否是一些普遍支持的正则表达式子集。例如说,
    (*MARK)
    不受支持。哦,还要注意
    (?{
    ..
    })
    (?{
    ..
    })
    如果使用Perl,它们可以执行嵌入式代码。没有“普遍支持的正则表达式子集”,相信我:)或者如果你需要说服力,去看看各种页面和选项。我不太确定是不是这样,但我接受你更广泛的观点。这里有很多变化,甚至在一些非常基本的东西上。我倾向于在C++正则表达式库(STD::ReGEX)上进行解决,并使用JNI来验证java中的字符串。感谢您的帮助@Lucas Trzesniewski。您必须为PCRE正则表达式语法编写解析器(或使用),或者直接通过JNE使用PCRE库(或调用Perl脚本)。请注意boost::regex不支持完整的Perl语法。听起来像是对我的回答:)你能告诉我关于boost.regex不支持完整Perl语法的更多细节的文档吗。我在图书馆文档中没有看到,但可能没有看到。更一般地说,似乎到处都是这样。我想我现在的问题是更多地验证字符串内容是否是一些普遍支持的正则表达式子集。例如说,
    (*MARK)
    不受支持。哦,还要注意
    (?{
    ..
    })
    (?{
    ..
    })
    如果使用Perl,它们可以执行嵌入式代码。没有“普遍支持的正则表达式子集”,相信我:)或者如果你需要说服力,去看看各种页面和选项。我不太确定是不是这样,但我接受你更广泛的观点。这里有很多变化,甚至在一些非常基本的东西上。我倾向于在C++正则表达式库(STD::ReGEX)上进行解决,并使用JNI来验证java中的字符串。感谢您的帮助@Lucas Trzesniewski。