1

次の正規表現を作成するのに問題があります:[1,2,3,4]

回避策を見つけましたが、醜いと思います

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

誰かが私が分割機能で使用できる1つの正規表現を作成するのを手伝ってくれますか?助けてくれてありがとう

編集:この文字列「[1,2,3,4]」から4つのエントリを持つ配列に取得したいと思います。エントリは文字列内の4つの数字なので、「["、"]」と「、」を削除する必要があります。「、」は問題ではありません。最初と最後の番号には[または]が含まれます。だから私はreplaceAllで修正する必要がありました。しかし、「、」の正規表現を分割して使用すると、「[""]」を削除する正規表現も渡すことができると思います。しかし、この正規表現がどのように見えるべきか、私にはわかりません。

4

5 に答える 5

3

これはほとんどあなたが探しているものです:

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

問題は、先頭の開き括弧が原因で、配列の先頭に余分な要素が生成されることです。シェナニガンなしの単一の正規表現では、やりたいことを実行できない場合があります。文字列が常に開き括弧で始まることがわかっている場合は、最初にそれを削除できます。

正規表現自体は、「(分割された)任意の開き括弧、または閉じた括弧、または任意のコンマ」を意味します。

句読点は、正規表現で追加の意味を持つことがよくあります。最初のバックスラッシュは、次のバックスラッシュが特殊文字ではないことを Java String パーサーに伝えます (例: \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 に答える