正则表达式匹配方括号内的字符串

时间:2014-01-22 12:27:01

标签: java regex

"[ram]"字符串中匹配"abcd[ram]xyz"(方括号括号括起来的内容)的正则表达式为"\[(.*?)\]"。在同一个字符串中匹配"ram"(方括号内的内容)的正则表达式是什么?

4 个答案:

答案 0 :(得分:3)

  

"[ram]"字符串中匹配"abcd[ram]xyz"的正则表达式为"\[(.*?)\]"

确实如此,但不情愿的量词 ?的存在使其成为rather inefficient one。更好的表达方式是

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

此修改避免了回溯,使其成为更有效的正则表达式。

  

在同一个字符串中匹配"ram"(方括号内的内容)的正则表达式是什么?

这就是表达!您只需从比赛中拉出第1组:

Pattern p = Pattern.compile("\\[([^\\]]*)\\]"); // Note how slashes need double-escaping in Java
Matcher m = p.matcher("abcd[ram]xyz");
if (m.find()) {
    System.out.println(m.group(1));
}

Demo on ideone.

答案 1 :(得分:1)

您可以尝试使用前瞻并向后看:

(?<=\[)(.*)(?=\])

答案 2 :(得分:0)

你可以使用相同的正则表达式“[(。*?)]”然后提取子字符串(去掉字符串中的第一个和最后一个字符)。或者只是搜索“ram”。

答案 3 :(得分:0)

使用后视和前瞻:

(?<=\[).*?(?=\])

由于环顾四周不消耗输入,整个匹配是方括号内的内容(不需要组)