括号之间的Java preg_match

时间:2014-12-08 11:09:18

标签: java regex

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

String test = "hello" + "[" + 800 + "]" + "\n" + "world" + "[" + 810 + "]";

800810是随机的。现在我想使用\[(.*?)\]这样的正则表达式来捕获括号中的任何\n字符串。这意味着得到这样的字符串:

800\n810

怎么做并在括号之间获取所有数字数据并为test提供新值?

Pattern pattern = Pattern.compile ( "\\[([^]]*)\\]" );
Matcher matcher = pattern.matcher(test );
test  = matcher.group();

3 个答案:

答案 0 :(得分:0)

  

如何做到并在括号中获取所有数字数据

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

\[(\d+)\]

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

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

\[([^]]*)\]

Java代码:

Pattern p = Pattern.compile("\\[(\\d+)\\]");
Matcher m = p.matcher( test );
while (matcher.find()) {
   System.out.printf("Group: " + m.group(1));
}

答案 1 :(得分:0)

您也可以尝试使用Look around来获取括号内的数字。

正则表达式:

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

示例代码:

String test = "hello" + "[" + 800 + "]" + "\n" + "world" + "[" + 810 + "]";

String regex="(?<=\\[)\\d+(?=\\])";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(test);
while(matcher.find()){
    System.out.println(matcher.group());
}

输出:

800
810

要在括号之间捕获任何,请使用以下正则表达式:

(?<=\[)[^]]+(?=\])

答案 2 :(得分:0)

查看Pattern的javadoc。

您的示例与"hello8\nworld1"匹配 - 严格"\r?\n"也可能包含Windows行结尾,其中包含两个字符CR又名\r和LF又名\n -

正则表达式字符串中的反斜杠字符串中的反斜杠需要进行转义,反斜杠,自己。一个非常痛苦的国家。

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

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);
}

带有最终问号(.*?)的热切表单确保最短匹配,而不是在遇到]时搜索更多]