括号之间的Java预匹配

括号之间的Java预匹配,java,regex,Java,Regex,在我的应用程序中,我可以使用以下字符串: String test = "hello" + "[" + 800 + "]" + "\n" + "world" + "[" + 810 + "]"; 800和810是随机的。现在,我想使用正则表达式,比如\[(.*?\],在括号之间用任何\n捕获字符串。这意味着获得如下字符串: 800\n810 如何做到这一点,获取括号中的所有数字数据,并为测试提供新值 Pattern pattern = Pattern.compile ( "\\[([^]]*)

在我的应用程序中,我可以使用以下字符串:

String test = "hello" + "[" + 800 + "]" + "\n" + "world" + "[" + 810 + "]";
800
810
是随机的。现在,我想使用正则表达式,比如
\[(.*?\]
,在括号之间用任何
\n
捕获字符串。这意味着获得如下字符串:

800\n810
如何做到这一点,获取括号中的所有数字数据,并为
测试提供新值

Pattern pattern = Pattern.compile ( "\\[([^]]*)\\]" );
Matcher matcher = pattern.matcher(test );
test  = matcher.group();
如何做到这一点,并获得括号之间的所有数字数据

您可以使用此正则表达式:

\[(\d+)\]
在Java中,它将是:
\\[(\\d+\\\]

要捕获方括号中的任何内容,请使用:

\[([^]]*)\]
Java代码:

Pattern p = Pattern.compile("\\[(\\d+)\\]");
Matcher m = p.matcher( test );
while (matcher.find()) {
   System.out.printf("Group: " + m.group(1));
}
您也可以尝试使用获取括号内的数字

正则表达式:

                         (?<=\[)\d+(?=\])
 Look behind for [ ---------^^^      ^^^------------Look ahead for ]

要捕获括号之间的任何内容,请使用下面的正则表达式:

(?<=\[)[^]]+(?=\])
(?查看的javadoc

您的示例将匹配
“hello8\nworld1”
-tough
“\r?\n”
也可能包含由两个字符组成的Windows行结尾,即CR aka
\r
和LF aka
\n
-

正则表达式字符串中特定于正则表达式的反斜杠本身需要转义、反斜杠。这是一种非常令人遗憾的状态

与行尾不匹配,但存在一个选项DOTALL来改变此行为。您也可以使用命令字符串
(?s)
(=单行)设置dot\u ALL


带有最后一个问号
(.*)
的热切表单确保了最短的匹配,当遇到
]

时,不会再搜索
]
,为您提供了一些Java代码,但我建议您也在Oracle网站上阅读Java正则表达式教程,以便快速学习。@jJz:如果您还有任何疑问,请告诉我。
800
810
(?<=\[)[^]]+(?=\])
Pattern pattern = Pattern.compile("(?s)\\[(.*?)\\]");
Pattern pattern = Pattern.compile("\\[(.*?)\\]", Pattern.DOTALL);
Matcher m = pattern.matcher(".....");
//while (m.find() { } // Search in the middle
//if (m.matches()) { } // Match all
if (m.lookingAt()) { // Starting
    String s = m.group(1);
}