Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 用于提取方括号和圆括号内内容的正则表达式_Java_Regex - Fatal编程技术网

Java 用于提取方括号和圆括号内内容的正则表达式

Java 用于提取方括号和圆括号内内容的正则表达式,java,regex,Java,Regex,是否有一个表达式可用于将方括号和圆括号的内容提取到列表或数组中?这就是我所拥有的,它提取了括号中的完整字符串。我只想要括号里的文字 String example = "[21](BULK(KIN[1[35]](MARK)))"; Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(example); while(m.find()) { System.out.println(m.group(1)); } 它不应该通过指

是否有一个表达式可用于将方括号和圆括号的内容提取到列表或数组中?这就是我所拥有的,它提取了括号中的完整字符串。我只想要括号里的文字

String example = "[21](BULK(KIN[1[35]](MARK)))";    
Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(example);
while(m.find()) {
    System.out.println(m.group(1));    
}

它不应该通过指定应该忽略哪些字符并在整个字符串上无限重复这些字符来达到目的吗

[^\[\]\(\)]+
末尾的
+
避免匹配空匹配项。 但这不会检查是否正确设置了括号和大括号

我的代码如下:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        String example = "[21](BULK(KIN[1[35]](MARK)))";
        Matcher m = Pattern.compile("\\w+").matcher(example);
        while (m.find()) {
            list.add(m.group());
        }

        System.out.println(list);

        // Array
        String[] arr = list.toArray(new String[0]);
        System.out.println(Arrays.toString(arr));
    }
}
String-example=“[21](批量(KIN[1[35]](MARK)))”;
Matcher m=Pattern.compile(“[^\\[\\]\\\(\\)]+”).Matcher(示例);
while(m.find()){
系统输出打印(m.group(0)+“”;
}

双反斜杠是java使用此字符作为转义字符本身产生的。还请注意,我更改了打印语句,使其与您在问题下方的评论中描述的一样。

如果您只想提取由字母组成的部分,可以搜索以下内容:

Matcher m = Pattern.compile("([a-zA-Z]+)").matcher(example);
然后在while循环中收集匹配项。 编辑:


提取所有文字,包括数字。

您可以使用以下正则表达式提取感兴趣的字符串:

/(?<=\[|\()[^\[\]\(\)]+/x
与此正则表达式的匹配将是
“21是赢家”
“批量”
“KIN”
“1”
“35”
“标记我的男人”


正则表达式的内容是,“匹配一个或多个(
+
)字符,而不是字符串
'[]()'
[^\[\]\(\)]
作为字符类)中的(
^
)字符,该字符前面紧跟着
'['
)您可以按如下方式执行:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        String example = "[21](BULK(KIN[1[35]](MARK)))";
        Matcher m = Pattern.compile("\\w+").matcher(example);
        while (m.find()) {
            list.add(m.group());
        }

        System.out.println(list);

        // Array
        String[] arr = list.toArray(new String[0]);
        System.out.println(Arrays.toString(arr));
    }
}

你期望得到什么样的结果?我已经更新了我的问题。请让我重新表述一下,你是需要你的输出作为整体还是整体她并不是在评论中详细阐述。问题应该是独立的,部分原因是并非所有读者都阅读所有评论。当你给出一个例子时,一定要展示期望的结果(作为一种有效的语言结构)。此外,如果您显示了您尝试过的不正确的内容,请显示您得到的结果。据我所知,提问者的问题是,您希望提取方括号和圆括号内的字母。意思是没有方括号和圆括号。这正是我的代码所做的:它忽略所有
[
]
。看看我的正则表达式是如何以
[^
开头的,它告诉它在
[^
和最后一个
]
之间搜索不属于指定字符的任何内容。
"[21 is a winner((BULK]KIN(1[35]](MARK my man[[["
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        String example = "[21](BULK(KIN[1[35]](MARK)))";
        Matcher m = Pattern.compile("\\w+").matcher(example);
        while (m.find()) {
            list.add(m.group());
        }

        System.out.println(list);

        // Array
        String[] arr = list.toArray(new String[0]);
        System.out.println(Arrays.toString(arr));
    }
}
[21, BULK, KIN, 1, 35, MARK]
[21, BULK, KIN, 1, 35, MARK]