使用正则表达式在括号中查找包含单个字符的单词

时间:2011-09-02 19:34:25

标签: java regex

我正在尝试查找括在双括号中的所有单词,并在单词的中间包含一个括号,我正在使用Java。

到目前为止,我有这个,但它不太有用。

\\[\\[[\\[|\\]]\\]\\]

有什么建议吗?

对于此示例输入"hello [[wo[orld]]",我想找到"[[wo[orld]]"

3 个答案:

答案 0 :(得分:4)

这应该做:

String str = "hello [[wo[orld]]";

Pattern p = Pattern.compile("\\[\\[[^\\[\\]]*[\\[\\]][^\\[\\]]*\\]\\]");
Matcher m = p.matcher(str);

if (m.find())
    System.out.println(m.group(0));

<强>输出:

[[wo[orld]]

模式细分:

  • \[\[ - 两个初始[[(你已经做到了!)
  • [^\[\]]* - 除[]以外的其他内容<0}
  • [\[\]] - “中间”括号符号
  • [^\[\]]* - 除[]以外的其他内容<0}
  • \]\] - 两次关闭]](你发现的那个)

答案 1 :(得分:1)

如果你想捕捉双括号中的内容,如果你不在乎单个括号周围是否有其他非括号字符,请尝试:

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

否则,如果最里面的括号周围必须至少有一个非括号字符,请将星号更改为加号,即:

(\[\[[^\[\]]+\[[^\[\]]+\]\])

答案 2 :(得分:-2)

术语括号有点重载但我假设您正在尝试匹配表单的字符串:

[[一些[事情]]

String sampleString = "[[some[thing]]";
System.out.println(Pattern.matches("\\[\\[.*\\[.*\\]\\]", sampleString)); //true

Pattern.matches()是一个静态方法,对匹配返回true,否则为false