Java Regexp:用括号分割

时间:2017-03-14 19:05:53

标签: java

我知道要按括号拆分我需要使用\\[符号,按照此主题:Split using a bracket

但是,我需要从[和]中获取令牌。

示例字符串是study[2],我需要获取令牌2

以下在Eclipse的表达式调试器中给出错误:

"study[2]".split("\\[\\]");

我应该使用另一个正则表达式吗?

3 个答案:

答案 0 :(得分:2)

如果你真的想拆分,你必须做一组括号。

"study[2]".split("[\\[\\]]");

因为String难以阅读,所以再次使用没有Java转义的正则表达式

[\[\]]

这意味着,您有一个组(外部括号)包含两个元素[],每个元素都被转义。这意味着,分为[]。根据这一点,"a]bc[1]2[][3"之类的字符串将在每个括号中拆分,因此您获得abc12,{{1} }。

如果你的问题比我在这里假设的更简单,那么@ user1766169的答案就不那么过分了。

答案 1 :(得分:1)

改为使用子字符串:

String testString = "study[2]";
int startIndex = testString.indexOf("[");
int endIndex = testString.indexOf("]");
String subString = testString.substring(startIndex+1, endIndex);
System.out.println(subString);

这将打印2。

答案 2 :(得分:1)

如果您需要使用[或]之一进行拆分,请使用

"study[2]".split("[\\[\\]]");

<强>输出: -

study
2

如果您打算在括号内提取数字,请使用以下内容: -

Pattern p = Pattern.compile(".*\\[([0-9]+)\\].*");
Matcher m = p.matcher("study[2]");
System.out.println(m.matches());
System.out.println(m.group(1));

<强>输出: -

true
2
  

注意: - 需要调用m.matches(),否则m.group(1)将调用   不会返回任何结果。

正则表达式字符串

.*  - match any character 0 or more times 

\\[  - an escaped [ character

(  - open the braces to group items. These matched groups can be later re-used.

[0-9]+  - match any number.

)  - grouping ends. Anything inside a group is accessible by calling group(1) (1 for the first group). 

\\]  - an escaped ] character

.*