如果您知道标识符的字符集,您可以简单地对不在该集中的所有文本进行拆分。例如,如果您的标识符仅由单词字符 ( [a-zA-Z_0-9]
) 组成,您可以使用:
String[] parts = "on[?a, ?b, ?c]".split("[\\W]+");
String name = parts[0];
String[] vars = Arrays.copyOfRange(parts, 1, parts.length);
如果您的标识符只有 AZ(上下),您可以将\\W
上面替换为^A-Za-z
.
我觉得这比使用复杂的正则表达式更优雅。
编辑:我意识到你的第二个例子“不清楚”会有问题。如果您没有选择使用下划线代替空格之类的东西,您可以在[?
(或子字符串)上进行一次拆分以获取“名称”,然后在其余部分上进行另一次拆分,如下所示:
String s = "not clear[?a, ?b, ?c]";
String[] parts = s.split("\\[\\?"); //need the '?' so we don't get an extra empty array element in the next split
String name = parts[0];
String[] vars = parts[1].split("[\\W]+");