java正则表达式单词,不带点结尾

时间:2014-04-15 21:06:23

标签: java regex

我需要在SQL查询中打印简单的绑定变量名。 我需要打印以:字符开头但不以点.字符结尾的单词。 在此示例中,我需要打印pOrgpBusinessId,而不是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);

    }
}

3 个答案:

答案 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)

您可以尝试:

Pattern regex = Pattern.compile("^:.*?[^.]$");

Regular expression visualization

Demo

答案 2 :(得分:0)

由于看起来您正在使用camelcase,因此在排除:NULL时,您实际上可以简化一些事情:

:([a-z][\\w]+)\\b(?!\\.)

$1将返回您的变量名称。

不依赖于负向前瞻的替代方案:

:([a-z][\\w]+)\\b(?:[^\\.]|$)