Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构建此正则表达式的问题[1,2,3]_Java_Regex - Fatal编程技术网

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

Java 构建此正则表达式的问题[1,2,3],java,regex,Java,Regex,我在生成以下正则表达式时遇到问题: [1,2,3,4] 我找到了一份工作,但我觉得很难看 String stringIds = "[1,2,3,4]"; stringIds = stringIds.replaceAll("\\[", ""); stringIds = stringIds.replaceAll("\\]", ""); String[] ids = stringIds.split("\\,"); 有人能帮我建立一个正则表达式,我可以在分割函数中使用吗 谢谢你的帮助 编辑: 我想从

我在生成以下正则表达式时遇到问题: [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来修复。但是我认为如果我在拆分一个regex for,,中使用,我也可以传递一个regex,它也消除了[]。但我不知道这个正则表达式应该是什么样子。

在我看来,你好像在试图制作一个数组,但不确定“正则表达式”是从哪里来的;这意味着不同的东西。在这种情况下,您需要:

String[] ids = {"1","2","3","4"};
如果它是您想要的整数数组,请使用:

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

在我看来,你正在尝试创建一个数组,但不确定“regex”是从哪里来的;这意味着不同的东西。在这种情况下,您需要:

String[] ids = {"1","2","3","4"};
如果它是您想要的整数数组,请使用:

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

如果代码的第一行如下所示:

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
}

如果代码的第一行如下所示:

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
}

这几乎就是您想要的:

    String q = "[1,2,3,4]";
    String[] x = q.split("\\[|\\]|,");
问题是,由于前面的开放括号,它在数组的开头产生了一个额外的元素。你可能无法用一个没有诡计的正则表达式做你想做的事情。如果您知道字符串总是以一个开括号开头,可以先将其删除

正则表达式本身意味着在任意开括号、任意闭括号或任意逗号上拆分


标点符号在正则表达式中通常具有附加含义。双前导反斜杠。。。呃,第一个反斜杠告诉Java字符串解析器下一个反斜杠不是特殊字符示例:\n是换行符。。。所以\\意味着我想要一个对上帝诚实的反斜杠。下一个反斜杠告诉regexp引擎下一个字符[例如,不是特殊的regexp字符。这让我很开心。

这几乎就是您要查找的:

    String q = "[1,2,3,4]";
    String[] x = q.split("\\[|\\]|,");
问题是,由于前导的开括号,它在数组的开头产生了一个额外的元素。您可能无法使用单个regex sans sheanigans执行您想要的操作。如果您知道字符串总是以开括号开头,可以先删除它

正则表达式本身意味着在任意开括号、任意闭括号或任意逗号上拆分


标点符号字符在正则表达式中通常具有附加含义。双前导反斜杠…呃,第一个反斜杠告诉Java字符串解析器下一个反斜杠不是特殊字符示例:\n是换行符…所以\\表示我想要一个诚实的反斜杠。下一个反斜杠告诉regexp引擎下一个字符[例如,不是特殊的regexp字符。这让我很高兴。

您的问题不适合按分隔符拆分。通过匹配整数本身进行拆分更安全、更通用:

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]")));
}

您的问题不适合按分隔符拆分。通过匹配整数本身进行拆分更安全、更通用:

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]")));
}
也许从头到尾都是子串[和],然后用

也许从头到尾都是子串[和],然后用


Java不是有一个连接方法吗?不太清楚你到底想要什么。首先你说你想要正则表达式[1,2,3,4],但它看起来真的不太像正则表达式;你到底想要什么?然后你说字符串stringIDs=[1,2,3,4];在我看来,它甚至不会编译,然后代码的其余部分使它看起来好像你真正想要的是一个包含1、2等的字符串列表。但是从什么输入?为了其他和我一样愚蠢的读者,你能澄清一下你到底想做什么吗?@MarkLinus AFAIK,标准的l库中没有类似Ruby的连接方法。遗憾的是,+1对于OP来说意识到一些根本错误。抱歉,忘记了这个版本中的。这只是一个摘录。Java没有连接方法吗?不太清楚您到底想要什么。首先,您说您想要正则表达式[1,2,3,4]但它看起来真的不太像正则表达式;你到底想要什么?然后你说stringIDs=[1,2,3,4];在我看来,它甚至不会编译,然后代码的其余部分使它看起来好像你真正想要的是一个包含1、2等的字符串列表。但是从什么输入?为了其他和我一样愚蠢的读者,你能澄清一下你到底想做什么吗?@MarkLinus AFAIK,标准的l库没有类似于Ruby的连接方法
. 可悲的是,+1表示OP意识到一些根本错误。抱歉,在此版本中忘记了。这只是摘录,我不确定。编辑这篇文章是为了反映这一点。我不确定。编辑文章以反映这一点。