0 0

请教一个java的正则表达式15

如题:

我要将 一段字符
select * from t_tab where name=? and pass=? and age=?

匹配出 name=?
pass = ?
age = ?

请熟悉的赐教
OO 
2010年8月20日 10:11

2个答案 按时间排序 按投票排序

0 0

		String str = "select * from t_tab where name=? and pass=? and age = ? order by a = ?";
		Pattern p = Pattern.compile("(?<=where)( *[^ ]* *= *\\? *(and)?)*");
		Matcher m = p.matcher(str);
		while (m.find()) {
			String group = m.group();
			String[] arr = group.split("and");
			for (String s : arr) {
				System.out.println(s);
				System.out.println(s.split("=")[0].trim());
			}
		}

2010年8月20日 11:14
0 0

这个东西如果就是你这条语句,实现起来是比较简单的,但是这是死的。要想写出比较好的解析方案,regex是不能完全瞒住这个需求的,还有可以通过其它办法来做,

1从where拆分,然后匹配=号,这样就可以匹配出来。这个是sql树原理

2终极解决办法:你需要一个sql编译器。

我现在也遇到这样的问题,就是要对sql里面的常量值进行审计,用的是oracle数据库。

由于sql语句的多样性和复杂性导致很难完全解析出来。终极解决方案是sql分析器。
这个是数据库的核心技术,很难在短时间内攻克!

推荐书籍 lex &yacc

        javaCC

2010年8月20日 11:05

相关推荐

Global site tag (gtag.js) - Google Analytics