【发布时间】:2011-06-03 18:32:50
【问题描述】:
我正在尝试获取字符串中的所有名称,如下所示:
: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 \))/
【问题讨论】:
-
@kaj:
name, lastName, bd,依此类推(或 group(n) = name, group(n+1) = lastName, group(n+2) = bd, group( n+m)=等) -
只是为了澄清:问题是重复匹配 (\\w+)+ 只保留最新匹配,这就是为什么
lastName似乎被忽略了。我以前不知道这一点。 -
我猜你应该使用一些标准的正则表达式来验证查询的第一部分(文本部分),然后使用@MarcoS 或@Aku 的方法来处理以“:”开头的位.
标签: java regex language-agnostic