gpt4 book ai didi

java - 使用 Java 正则表达式解析 Drools 规则文件

转载 作者:行者123 更新时间:2023-11-29 06:35:09 26 4
gpt4 key购买 nike

我对使用正则表达式解析 Drools 规则文件很感兴趣。有一个包含整个 .drl 文件内容的字符串,我想要 4 个子字符串:

  1. 内容为<name> 的子串
  2. 内容为<attribute> 的子串
  3. 内容为<conditional element> 的子串
  4. 内容为<action> 的子串

Drools 规则具有以下结构,根据 official documentation :

rule "<name>"
<attribute>*
when
<conditional element>*
then
<action>*
end

我尝试过使用这种模式,但效果不佳:

^rule"(.|\n|\r|\t)+"(.|\n|\r|\t)+\bwhen\b(.|\n|\r|\t)+\bthen\b(.|\n|\r|\t)+\bend\b?$

有人知道我该如何继续吗?

最佳答案

我知道你的问题是关于正则表达式的,但我强烈建议不要使用它。有太多情况会导致您的正则表达式失败...例如,单个单词的规则名称不需要“”,规则关键字不需要成为行中的第一件事,等等...

/*this is a comment on the start of the line*/ rule X...

不用正则表达式,直接使用 DrlParser,它会给你所有你需要的信息:

String drl = "package foo \n"
+ "declare Bean1 \n"
+ "field1: java.math.BigDecimal \n"
+ "end \n"
+ "rule bigdecimal\n"
+ "when \n"
+ "Bean1( field1 == 0B ) \n"
+ "then \n"
+ "end";

DrlParser parser = new DrlParser(LanguageLevelOption.DRL6);
PackageDescr pkgDescr = parser.parse( null, drl );

PackageDescr.getRules() 将为您提供文件中的所有 RuleDescr,每个 RuleDescr 都有一个 getName() 来为您提供规则名称等。所有类型都是安全的,没有边缘情况等。

关于java - 使用 Java 正则表达式解析 Drools 规则文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22253079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com