我在构建以下正则表达式时遇到问题: [1,2,3,4]
我找到了解决办法,但我觉得它很丑陋
String stringIds = "[1,2,3,4]";
stringIds = stringIds.replaceAll("\\[", "");
stringIds = stringIds.replaceAll("\\]", "");
String[] ids = stringIds.split("\\,");
有人可以帮助我构建一个正则表达式,我可以在split函数中使用它 谢谢你的帮助
编辑: 我想从这个字符串“[1,2,3,4]”到一个包含4个条目的数组。条目是字符串中的4个数字,所以我需要消除“[”,“]”和“,”。 “,”不是问题。 第一个和最后一个数字包含[或]。所以我需要使用replaceAll修复。但我想如果我使用分裂正则表达式“,”,我也可以通过一个正则表达式,消除“[”“]”。但我无法弄清楚,这个正则表达式应该是什么样的。
答案 0 :(得分:3)
这几乎就是你要找的东西:
String q = "[1,2,3,4]";
String[] x = q.split("\\[|\\]|,");
问题在于,由于前导开括号,它会在数组的开头生成一个额外的元素。你可能无法用一个正则表达式的shenanigans做你想要的。如果知道,则字符串始终以开括号开头,您可以先将其删除。
正则表达式本身意味着“(拆分)任何开括号,或任何封闭的括号,或任何逗号。”
标点字符在正则表达式中经常具有其他含义。双重反斜杠......呃,第一个反斜杠告诉Java String解析器下一个反斜杠不是特殊字符(例如:\ n是换行符......)所以\\
表示“我想要诚实上帝的反斜杠“。下一个反斜杠告诉regexp引擎 next 字符(例如[
)不是一个特殊的正则表达式字符。这让我大笑。
答案 1 :(得分:2)
从开头和结尾可能是子串[
和]
,然后按,
String stringIds = "[1,2,3,4]";
String[] ids = stringIds.substring(1,stringIds.length()-1).split(",");
答案 2 :(得分:1)
在我看来,你正试图制作一个阵列(不确定你从哪里得到'正则表达式';这意味着不同的东西)。在这种情况下,您需要:
String[] ids = {"1","2","3","4"};
如果它特别是你想要的整数数组,那么请使用:
int[] ids = {1,2,3,4};
答案 3 :(得分:1)
您的问题无法通过分隔符进行拆分。通过匹配整数本身来分割更安全,更通用:
static String[] nums(String in) {
final Matcher m = Pattern.compile("\\d+").matcher(in);
final List<String> l = new ArrayList<String>();
while (m.find()) l.add(m.group());
return l.toArray(new String[l.size()]);
}
public static void main(String args[]) {
System.out.println(Arrays.toString(nums("[1, 2, 3, 4]")));
}
答案 4 :(得分:0)
如果您的代码所在的第一行:
String stringIds = "[1,2,3,4]";
并且您正在尝试遍历所有数字项,然后以下代码片段只能起作用:
try {
Pattern regex = Pattern.compile("\\b(\\d+)\\b", Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
for (int i = 1; i <= regexMatcher.groupCount(); i++) {
// matched text: regexMatcher.group(i)
// match start: regexMatcher.start(i)
// match end: regexMatcher.end(i)
}
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}