java正则表达式匹配& [text]

时间:2017-02-02 19:51:57

标签: java regex

我目前正致力于创建一个正则表达式,以分割出符合以下格式的所有字符串:& [ text ]并需要获取文本 。字符串可能看起来像:& [ text ]& [ text ]任何东西& [ text ]等。

我尝试过以下正则表达式,但我似乎无法让它工作:& \ [(。*)\]

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

关于逃跑,括号有点棘手。试试这个:

Pattern r = Pattern.compile("&\\[([^\\]]*)\\]");
Matcher m = r.matcher("foo &[bla] [foo] &[blub]&[blab]");
while (m.find()) {
    System.out.println("Found value: " + m.group(1));
}

我用一组不是右括号的符号替换了你的点。否则,明星运算符会贪婪地匹配,直到字符串的最后。你也可以抑制与问号的贪婪匹配,这更好看:"&\\[(.*?)\\]"

答案 1 :(得分:0)

您需要做的两件事:

  1. 双击你的方括号
  2. 阻止捕获组匹配其他模式,防止匹配开头或右括号
  3. import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Test {
      public static void main(String[] args) {
          String s = "&[test] something ] something &[test2]";
          Pattern pattern = Pattern.compile("&\\[([^\\[\\]]*)\\]");
          Matcher matcher = pattern.matcher(s);
          while (matcher.find()) {
              System.out.println("capture group: " + matcher.group(1));
          }
      }
    }
    
相关问题