用Java验证PCRE
给定一个字符串,如何在Java中验证内容是否是有效的PCRE?我不想在Java中以任何方式使用正则表达式,只是验证它的内容 几乎已经足够好了,但是它的javadoc指出了它与Perl的区别 具体而言,有一个包含3个相关组件的系统:用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
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。