我需要在SQL查询中打印简单的绑定变量名。
我需要打印以:
字符开头但不以点.
字符结尾的单词。
在此示例中,我需要打印pOrg
,pBusinessId
,而不是parameter
。
正则表达式="(:)(\\w+)^\\."
不起作用。
由于 Peddi
public void testMethod(){
String regEx="(:)(\\w+)([^\\.])";
String input= "(origin_table like 'I%' or (origin_table like 'S%' and process_status =5))and header_id = NVL( :parameter.number1:NULL, header_id) and (orginization = :pOrg) and (businsess_unit = :pBusinessId";
Pattern pattern;
Matcher matcher;
pattern = Pattern.compile(regEx);
matcher = pattern.matcher(input);
String grp = null;
while(matcher.find()){
grp = matcher.group(2);
System.out.println(grp);
}
}
答案 0 :(得分:4)
您可以尝试使用类似
的内容String regEx = "(:)(\\w+)\\b(?![.])";
(:)(\\w+)\\b
会确保您只匹配以:
(?![.])
是look behind mechanism,确保在找到单词后没有.
这个正则表达式也允许:NULL
所以,如果有一些原因,为什么它不应该与我们分享。
无论如何要从结果中排除NULL
,您可以使用
String regEx = "(:)(\\w+)\\b(?![.])(?<!:NULL)";
要使正则表达式不区分大小写,以便NULL
也可以匹配null
,请使用Pattern.CASE_INSENSITIVE
标记编译此模式,如
Pattern pattern = Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
答案 1 :(得分:0)
答案 2 :(得分:0)
由于看起来您正在使用camelcase,因此在排除:NULL
时,您实际上可以简化一些事情:
:([a-z][\\w]+)\\b(?!\\.)
$1
将返回您的变量名称。
不依赖于负向前瞻的替代方案:
:([a-z][\\w]+)\\b(?:[^\\.]|$)