正则表达式:名称,:其他名称,:其他

时间:2011-06-03 18:32:51

标签: java regex language-agnostic

我正在尝试使用这样的字符串中的所有名称:

:name, :lastName

但我似乎找不到正确的方法。

这是我到目前为止所尝试的:

/^(:((\w+)(,:(\w+))+).*)$/

在Java中:

Pattern a = Pattern.compile("(:((\\w+)(,:(\\w+))+).*)");
Matcher m = a.matcher(":name,:lastName,:bd");
if( m.matches() ) { 
  for( int i = 0 ; i < m.groupCount() ; i++ ) { 
    out.println( i + " = " + m.group( i ) );
  }   
}

输出:

0 = :name,:lastName,:bd
1 = :name,:lastName,:bd
2 = name,:lastName,:bd
3 = name
4 = ,:bd

我正在尝试获取包含[name, lastName, bd]

的可变数量的组

修改

顺便说一下,我正试图通过一个更复杂的正则表达式来匹配简单的事情:

 insert into table values ( :a, :b, :c )

/insert\s+into\s+(\w+)\s+values\s+(\( HERE IS MY QUESTION \))/

4 个答案:

答案 0 :(得分:4)

是否要求将结果放在不同的组中?这将是另一项工作:

Pattern a = Pattern.compile(":([^,]+)");
Matcher m = a.matcher(":name,:lastName,:bd");
while (m.find()) {
    System.out.println(m.group(1));
}

编辑:...如果您想获得一系列结果,可以使用拆分:

String data = ":name,:lastName,:bd";
String[] parts = data.replace(":", "").split(",", -1);
System.out.println(Arrays.toString(parts));

答案 1 :(得分:3)

也许你想要这个:

public static void main(String[] args) {
    Pattern a = Pattern.compile(":(\\w+)");
    Matcher m = a.matcher("insert into table values ( :a, :b, :c )");
    while (m.find()) {
        System.out.println(m.group(1));
    }
}

输出:

a
b
c

答案 2 :(得分:2)

public static void main(String[] args)
{
    Pattern a = Pattern.compile(":([^,]+)");
    Matcher m = a.matcher(":name,:lastName,:bd");
    while (m.find())
    {
        System.out.println(m.group(1));
    }

}

答案 3 :(得分:2)

正则表达很难。为什么不只是split()呢?

String inputString = ":name,:lastName,:bd";

for (String s : inputString.split(",?:")) {
    System.out.println(s);
}