1

我在构建以下正则表达式时遇到问题:[1,2,3,4]

我找到了解决方法,但我认为它很难看

String stringIds = "[1,2,3,4]";
stringIds = stringIds.replaceAll("\\[", ""); 
stringIds = stringIds.replaceAll("\\]", "");
String[] ids = stringIds.split("\\,");

有人可以帮我建立一个正则表达式,我可以在拆分函数中使用它谢谢你的帮助

编辑:我想从这个字符串 "[1,2,3,4]" 到一个有 4 个条目的数组。条目是字符串中的 4 个数字,所以我需要消除“[”,“]”和“,”。“,”不是问题。第一个和最后一个数字包含 [ 或 ]。所以我需要用replaceAll修复。但我认为如果我使用拆分“,”的正则表达式,我也可以传递一个消除“[”“]”的正则表达式。但我不知道,这个正则表达式应该是什么样的。

4

5 回答 5

3

这几乎就是你要找的:

    String q = "[1,2,3,4]";
    String[] x = q.split("\\[|\\]|,");

问题在于,由于前导开括号,它会在数组的开头产生一个额外的元素。你可能无法用一个没有恶作剧的正则表达式做你想做的事。如果您知道字符串始终以左括号开头,则可以先将其删除。

正则表达式本身的意思是“(拆分)任何开括号,或任何闭括号,或任何逗号。”

标点符号在正则表达式中经常具有额外的含义。双前导反斜杠......呃,第一个反斜杠告诉 Java 字符串解析器下一个反斜杠不是特殊字符(例如:\n 是换行符......)所以\\意味着“我想要一个对上帝诚实的反斜杠”。下一个反斜杠告诉正则表达式引擎下一个字符([例如)不是特殊的正则表达式字符。这让我哈哈大笑。

于 2012-05-26T12:55:35.967 回答
2

也许是子字符串[]从头到尾,然后将其余部分拆分为,

String stringIds = "[1,2,3,4]";
String[] ids = stringIds.substring(1,stringIds.length()-1).split(",");
于 2012-05-26T13:03:46.743 回答
1

在我看来,您正在尝试创建一个数组(不确定您从哪里得到“正则表达式”;这意味着不同的东西)。在这种情况下,您需要:

String[] ids = {"1","2","3","4"};

如果它特别是您想要的整数数组,那么请改用:

int[] ids = {1,2,3,4};
于 2012-05-26T12:31:37.120 回答
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]")));
}
于 2012-05-26T12:59:29.567 回答
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
}
于 2012-05-26T12:32:16.487 回答