`
linliangyi2007
  • 浏览: 1013190 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

发布IK Expression开源表达式解析器 V2.1.2

阅读更多
Version2.1.2的变更:

1.根据网友提出的要求,修订了对未声明变量的处理,早期版本不允许变量未申明,将抛出异常。新版本将未申明变量视为 null,这样解决了上下文中对不存在的变量的判断问题,如 “variable == null”将返回 true。


下载地址:
IKExpressionV2.1.2 完整发布包

IKExpressoin简易表达式引擎V2.1.0使用说明.pdf

google code开源地址:http://code.google.com/p/ik-expression/

更多详细请参阅RAR包内的《IKExpressoin简易表达式引擎V2.1.0使用说明.doc》文档
分享到:
评论
30 楼 lovit 2010-01-05  
linliangyi2007 写道
lovit 写道
你好,我用FunctionLoader.addFunction的方法,注册函数,有没有一个清空重新注册的方法?谢谢!!


目前暂时没有,清空后回将已有的系统函数也一并清了。可以考虑在后面的版本中加上对用户注册函数的管理。



期待。。。。
29 楼 linliangyi2007 2010-01-05  
lovit 写道
你好,我用FunctionLoader.addFunction的方法,注册函数,有没有一个清空重新注册的方法?谢谢!!


目前暂时没有,清空后回将已有的系统函数也一并清了。可以考虑在后面的版本中加上对用户注册函数的管理。
28 楼 lovit 2010-01-05  
你好,我用FunctionLoader.addFunction的方法,注册函数,有没有一个清空重新注册的方法?谢谢!!
27 楼 linliangyi2007 2009-12-29  
dyuan 写道
被充一下,我的SQL语句中有用到一些自定义函数,使用IK表达式进行解析的目的是把自定义函数运算成真正的值


如果你做的是字符运算,而且是在java代码中测试,那么你的字符串需要加上引号,就是说,“AAA”对于表达式而言只是AAA,它会被认为一个变量而不是字符窜常量,你需要写成"\"AAA\"";这个传给表达式时才是一个字符常量,无数用户都忽视了这一层,这个很像正则表达式。
26 楼 dyuan 2009-12-29  
被充一下,我的SQL语句中有用到一些自定义函数,使用IK表达式进行解析的目的是把自定义函数运算成真正的值
25 楼 dyuan 2009-12-29  
我是做字符串运算的: "Main.AA" + "BB" ,也会出错。。
随然是SQL语句,我只是做字符运算,应该是没有错的吧。
24 楼 linliangyi2007 2009-12-29  
dyuan 写道
表达式:"SELECT Main.FID AS FID" 执行后报错:.

名称不能为非法字符:.
处理对象:null
处理位置: unknow
at org.wltea.expression.ExpressionExecutor.analyze(ExpressionExecutor.java:47)


兄弟,你没看说明文档吧,IK Expression不是用来解析SQL了啊,你完全用错方向了都!
23 楼 dyuan 2009-12-29  
表达式:"SELECT Main.FID AS FID" 执行后报错:.

名称不能为非法字符:.
处理对象:null
处理位置: unknow
at org.wltea.expression.ExpressionExecutor.analyze(ExpressionExecutor.java:47)
22 楼 linliangyi2007 2009-11-25  
目前IK-Expression开源项目由本人个人维护,发布该贴的目的是为IK-Expression的用户维护更新。

如果您对IK-Expression不以为然,您尽可以无视,不使用该开源项目,但请为它的用户保留一个维护更新的途径。

将帖子投为新手或隐藏显然不是什么好的做法,因为本帖并不试图阐述任何技术观点。
21 楼 linliangyi2007 2009-11-25  
jasonshi 写道
从文档上描述的功能看,这个表达式引擎的没有超过MVEL2的范围,
起点低了点,有重复制造轮子的嫌疑


汗死,这个引擎根本就是不用来代替现有的开源项目的,这个在项目的简介中就明确说明。它不是面向程序开发人员的,它是为了面向最终用户的,能够使用非常简单的表达式,包括了中文函数表达式。在你没看清项目的简介前,拜托不要乱投新手帖。

何况它已经有一年多的发展了,并不是今天才在论坛上推广的。

20 楼 jasonshi 2009-11-25  
从文档上描述的功能看,这个表达式引擎的没有超过MVEL2的范围,
起点低了点,有重复制造轮子的嫌疑
19 楼 linliangyi2007 2009-11-25  
Xiehgjava 写道
linliangyi2007 写道
Xiehgjava 写道
楼主,有个疑问,我自己定义了一个包:
package org.wltea.expression.test.funadd;

public class newMethod {
	
	
	
	
	
	public String sayHello(String value)
	{
		
		return value;
	}
}

然后在配置文件中配置:
<bean class="org.wltea.expression.test.funadd.newMethod">
<function name="SAYHELLO" method="sayHello">
<parameter-type>java.lang.String</parameter-type>
</function>
</bean>
然后引用SAYHELLO:
	public static void main(String[] args) {
	
			String expression = "$SAYHELLO(\"A\")";
			Object result=ExpressionEvaluator.evaluate(expression, null);
			System.out.println("Result=" + result);
		
	}

出现错误:
函数"SAYHELLO"不存在或参数类型不匹配
处理对象:SAYHELLO
请问是我哪里弄错了吗?




看不出有问题啊,感觉你的配置文件没有被正确读取,检查一下运行路径吧。


配置文件是放在java工程的根目录下吧?还是放在src目录下?


src是根下面,类的根路径
18 楼 Xiehgjava 2009-11-25  
linliangyi2007 写道
Xiehgjava 写道
楼主,有个疑问,我自己定义了一个包:
package org.wltea.expression.test.funadd;

public class newMethod {
	
	
	
	
	
	public String sayHello(String value)
	{
		
		return value;
	}
}

然后在配置文件中配置:
<bean class="org.wltea.expression.test.funadd.newMethod">
<function name="SAYHELLO" method="sayHello">
<parameter-type>java.lang.String</parameter-type>
</function>
</bean>
然后引用SAYHELLO:
	public static void main(String[] args) {
	
			String expression = "$SAYHELLO(\"A\")";
			Object result=ExpressionEvaluator.evaluate(expression, null);
			System.out.println("Result=" + result);
		
	}

出现错误:
函数"SAYHELLO"不存在或参数类型不匹配
处理对象:SAYHELLO
请问是我哪里弄错了吗?




看不出有问题啊,感觉你的配置文件没有被正确读取,检查一下运行路径吧。


配置文件是放在java工程的根目录下吧?还是放在src目录下?
17 楼 linliangyi2007 2009-11-24  
Xiehgjava 写道
楼主,有个疑问,我自己定义了一个包:
package org.wltea.expression.test.funadd;

public class newMethod {
	
	
	
	
	
	public String sayHello(String value)
	{
		
		return value;
	}
}

然后在配置文件中配置:
<bean class="org.wltea.expression.test.funadd.newMethod">
<function name="SAYHELLO" method="sayHello">
<parameter-type>java.lang.String</parameter-type>
</function>
</bean>
然后引用SAYHELLO:
	public static void main(String[] args) {
	
			String expression = "$SAYHELLO(\"A\")";
			Object result=ExpressionEvaluator.evaluate(expression, null);
			System.out.println("Result=" + result);
		
	}

出现错误:
函数"SAYHELLO"不存在或参数类型不匹配
处理对象:SAYHELLO
请问是我哪里弄错了吗?




看不出有问题啊,感觉你的配置文件没有被正确读取,检查一下运行路径吧。
16 楼 Xiehgjava 2009-11-24  
楼主,有个疑问,我自己定义了一个包:
package org.wltea.expression.test.funadd;

public class newMethod {
	
	
	
	
	
	public String sayHello(String value)
	{
		
		return value;
	}
}

然后在配置文件中配置:
<bean class="org.wltea.expression.test.funadd.newMethod">
<function name="SAYHELLO" method="sayHello">
<parameter-type>java.lang.String</parameter-type>
</function>
</bean>
然后引用SAYHELLO:
	public static void main(String[] args) {
	
			String expression = "$SAYHELLO(\"A\")";
			Object result=ExpressionEvaluator.evaluate(expression, null);
			System.out.println("Result=" + result);
		
	}

出现错误:
函数"SAYHELLO"不存在或参数类型不匹配
处理对象:SAYHELLO
请问是我哪里弄错了吗?

15 楼 linliangyi2007 2009-11-24  
kilo8850 写道

我就是看了主贴,所以以为这个版本里面的变量没有声明的话,是不会报错的,所以才有前面的理解。可能理解有误吧
但我又发现了一个问题:
0<=得分
这个表达式编译会报错
但0==得分
就不会报错

是的, 因为 == 号支持对 null型的比较啊。如果你把未声明的变量当成null,一切逻辑就都通顺了。
14 楼 kilo8850 2009-11-24  
linliangyi2007 写道


请看主贴:
1.根据网友提出的要求,修订了对未声明变量的处理,早期版本不允许变量未申明,将抛出异常。新版本将未申明变量视为 null,这样解决了上下文中对不存在的变量的判断问题,如 “variable == null”将返回 true。

不报错的原因是把“得分”这个变量当成null对待了。这个估计和你的逻辑不符的。

表达式之所以报错,是因为<=操作不支持null型


我就是看了主贴,所以以为这个版本里面的变量没有声明的话,是不会报错的,所以才有前面的理解。可能理解有误吧
但我又发现了一个问题:
0<=得分
这个表达式编译会报错
但0==得分
就不会报错
13 楼 linliangyi2007 2009-11-23  
kilo8850 写道
linliangyi2007 写道
kilo8850 写道
曾经给你提过添加compile的建议,在2.1.2版本中也确实出现了compile方法
但在应用中,实际上还是有问题。
如果不给变量赋值的话,编译是会报错的
比如这样的代码。

String expression ="(0<得分 && 得分<=20)?10:10.2";
ExpressionEvaluator.compile(expression);
会抛出异常错误。
而在实际使用过程中,往往会是用户录入了一个表达式,这时他并不知道“得分”这个变量的具体值,但想知道自己录入的公式是否合法,而用compile方法没有办法实现这一点。
不知道是我程序写的不对还是什么其他原因。


是这样的,变量可以不用赋值,但必须在上下文中预先声明,可以给null值,没有声明的变量是会出错的,就是java语言一样,必须先定义不是?!


嗯,刚才测试了一下,如果是基本的语法,比如 0<得分,编译就会报错
如果我自定义了一个函数,比如:

<bean class="test.CustomFunctions">

<function name="between" method="between1">
<parameter-type>double</parameter-type>
<parameter-type>double</parameter-type>
<parameter-type>double</parameter-type>
</function>
</bean>

那么expression ="$between(得分,0,20)";
编译的时候就不会报错,这时就没检查得分这个变量是否声明了


请看主贴:
1.根据网友提出的要求,修订了对未声明变量的处理,早期版本不允许变量未申明,将抛出异常。新版本将未申明变量视为 null,这样解决了上下文中对不存在的变量的判断问题,如 “variable == null”将返回 true。

不报错的原因是把“得分”这个变量当成null对待了。这个估计和你的逻辑不符的。

表达式之所以报错,是因为<=操作不支持null型
12 楼 kilo8850 2009-11-23  
linliangyi2007 写道
kilo8850 写道
曾经给你提过添加compile的建议,在2.1.2版本中也确实出现了compile方法
但在应用中,实际上还是有问题。
如果不给变量赋值的话,编译是会报错的
比如这样的代码。

String expression ="(0<得分 && 得分<=20)?10:10.2";
ExpressionEvaluator.compile(expression);
会抛出异常错误。
而在实际使用过程中,往往会是用户录入了一个表达式,这时他并不知道“得分”这个变量的具体值,但想知道自己录入的公式是否合法,而用compile方法没有办法实现这一点。
不知道是我程序写的不对还是什么其他原因。


是这样的,变量可以不用赋值,但必须在上下文中预先声明,可以给null值,没有声明的变量是会出错的,就是java语言一样,必须先定义不是?!


嗯,刚才测试了一下,如果是基本的语法,比如 0<得分,编译就会报错
如果我自定义了一个函数,比如:

<bean class="test.CustomFunctions">

<function name="between" method="between1">
<parameter-type>double</parameter-type>
<parameter-type>double</parameter-type>
<parameter-type>double</parameter-type>
</function>
</bean>

那么expression ="$between(得分,0,20)";
编译的时候就不会报错,这时就没检查得分这个变量是否声明了
11 楼 linliangyi2007 2009-11-23  
kilo8850 写道
曾经给你提过添加compile的建议,在2.1.2版本中也确实出现了compile方法
但在应用中,实际上还是有问题。
如果不给变量赋值的话,编译是会报错的
比如这样的代码。

String expression ="(0<得分 && 得分<=20)?10:10.2";
ExpressionEvaluator.compile(expression);
会抛出异常错误。
而在实际使用过程中,往往会是用户录入了一个表达式,这时他并不知道“得分”这个变量的具体值,但想知道自己录入的公式是否合法,而用compile方法没有办法实现这一点。
不知道是我程序写的不对还是什么其他原因。


是这样的,变量可以不用赋值,但必须在上下文中预先声明,可以给null值,没有声明的变量是会出错的,就是java语言一样,必须先定义不是?!

相关推荐

    IK Expression开源表达式解析器 V2.1.2.rar

    IK Expression开源表达式解析器V2.1.2是一款用于处理和解析文本表达式的强大工具,广泛应用于各类软件开发和数据分析场景。它以其高效、灵活和可扩展性著称,为开发者提供了便捷的方式来处理和执行复杂的逻辑表达式...

    IK Expression(表达式引擎)

    IK Expression 是一个开源的(OpenSource),可扩展的(Extensible), 基于java 语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行 工具包。它是一个采用逆波兰式算法结合指针栈优化的公式解析引擎...

    IK Expression V2.0

    IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK Expression V2.0不依赖于任何第三方的java库。它做为...

    IKExpression表达式解析器

    IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK ExpressionV2.0.5不依赖于任何第三方的java库。它做为一...

    表达式解析器 IKExpression

    IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK ExpressionV2.X.X不依赖于任何第三方的java库。它做为一...

    IKExpression2.1.2.jar

    IKExpression2.1.2.jar

    ik-expression源代码

    IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK ExpressionV2.0不依赖于任何第三方的java库。它做为一...

    IKExpression-2.1.2-SNAPSHOT

    IKExpression-2.1.2-SNAPSHOT.jar 找了很久才找到,,maven下载不下来,,备个份。

    IK 的jar包

    在本压缩包中,"IKExpressionV2.1.2AllInOne"表示的是IK分词器的一个版本,截至2018年11月8日,这是它的最新版本。 IK分词器的核心功能是对中文文本进行精确、快速的分词处理。它提供了两种模式:精确模式和全模式...

    基于java的表达式运算IK Expression

    IK Expression 是一个开源的(OpenSource),可扩展的(Extensible), 基 于java 语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行 工具包。IK Expression 不依赖于任何第三方的java 库。它做为一...

    IKExpression技术 运算表达式完美解析

    例如,"2+3*4"这样的表达式可以通过IKExpression轻松解析并得出正确结果。此外,它还允许用户自定义运算符,扩展其功能。 对象表达式是IKExpression的另一个亮点。开发者可以利用该特性直接操作对象的属性或者调用...

    IKExpressoin简易表达式引擎V2.1.0使用说明.rar_IKExpressoin_V2 _ik表达式

    IKExpression是一款针对Java平台的轻量级表达式引擎,主要用于解析和执行用户自定义的表达式,从而实现程序的动态配置和灵活性。IKExpression V2.1.0是该引擎的升级版本,提供了更高效、稳定和易用的特性。 在...

    Elasticsearch的开源中文分词器 IK Analysis.zip

    IK中文分词器在Elasticsearch上的使用。原生IK中文分词是从文件系统中读取词典,es-ik本身可扩展成从不同的源读取词典。目前提供从sqlite3数据库中读取。es-ik-plugin-sqlite3使用方法: 1. 在elasticsearch.yml中...

    IKAnalyzer开源轻量级中文分词工具包2012u6

    IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文...

    IKExpressoin简易表达式引擎V2.1.0使用说明

    IKExpression 采用了逆波兰式算法结合指针栈优化来实现高效的表达式解析。它主要由以下四个部分组成: - **表达式编译**:将用户输入的表达式转换成可执行的内部数据结构。 - **表达式执行**:根据编译后的数据结构...

    IKAnalyzer中文分词器v2012使用手册.pdf

    标题:"IKAnalyzer中文分词器v2012使用手册" 所述的知识点包括: IKAnalyzer是一款开源的基于Java语言开发的轻量级中文分词工具包,最早版本于2006年12月发布。作为一个文本分析组件,它最初是作为开源项目Lucene的...

    IK智能分词器下载8.12.2版本

    IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载...

    elasticsearch的ik中文分词器

    **Elasticsearch与IK中文分词器** Elasticsearch(ES)是一款强大的开源搜索引擎,它基于Lucene构建,提供实时、分布式、可扩展的搜索和分析能力。在处理中文文档时,由于中文句子中词语之间没有明显的分隔符,因此...

    IKExpressoin_简易表达式引擎_V2.1.0_使用说明.pdf

    IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。

    IKAnalyzer中文分词器V3.2使用

    **IKAnalyzer中文分词器V3.2使用详解** IKAnalyzer是一款开源的、适用于Java环境的中文分词器,主要用于解决在信息检索、文本挖掘等领域中遇到的中文处理问题。这款分词器的设计目标是提高分词的准确率,并且具有...

Global site tag (gtag.js) - Google Analytics