构建这个正则表达式的问题[1,2,3]

时间:2012-05-26 12:26:31

标签: java regex

我在构建以下正则表达式时遇到问题: [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修复。但我想如果我使用分裂正则表达式“,”,我也可以通过一个正则表达式,消除“[”“]”。但我无法弄清楚,这个正则表达式应该是什么样的。

5 个答案:

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