Java&正则表达式

时间:2014-05-13 18:38:01

标签: java regex parsing

需要帮助解析括号[]中包含关键字的行。

我试过但结果不对:

public class App {
    public static void main(String[] args) {

        Matcher mtr = Pattern.compile("(\\w+-\\w+|\\w+)+").matcher("[foo-bar] [baz][qux]");

        if (mtr.find()) for (int i = 0; i < mtr.groupCount(); i++) {
            System.out.println(mtr.group(i));
        }
    }
}

结果(错误的):

  

FOO杆

我需要:

foo-bar
baz
qux

解析字符串应该是什么正则表达式,如上一个例子?

5 个答案:

答案 0 :(得分:1)

只需尝试使用String#split()方法。

String str = "[foo-bar] [baz][qux]";
String[] array = str.substring(1, str.length() - 1).split("\\]\\s*\\[");

答案 1 :(得分:1)

试试这个

    Matcher mtr = Pattern.compile("[\\w-]+").matcher("[foo-bar] [baz][qux]");
    while(mtr.find()) {
        System.out.println(mtr.group());
    }

答案 2 :(得分:1)

而不是if (mtr.find())

while (mtr.find())
   for (int i = 0; i < mtr.groupCount(); i++) {
      System.out.println(mtr.group(i));
   }

即。你需要在循环中调用matcher#find()以返回全局匹配。

答案 3 :(得分:1)

只要您的括号无法嵌套,您就可以尝试使用正则表达式

\[([^\]]*)\]

并提取第一个捕获组。

那是:

Matcher mtr = Pattern.compile("\\[([^\\]]*)\\]").matcher("[foo-bar] [baz][qux]");

while (mtr.find())
    System.out.println(mtr.group(1));
foo-bar
baz
qux

答案 4 :(得分:1)

试试这个视网膜表达式

\[[^\[\]]*\]

http://rubular.com/r/heMGeTMjuB

或者,这个类似,并将"[foo[bar]"之类的内容解析为foo[bar

\[(.*?)\]

http://rubular.com/r/IzPI0RcLmS