括号之间的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);
}