2011-09-02 94 views
1

我试图找到所有包含在双括号中的单词,并且在单词的中间包含括号,我正在使用Java。使用正则表达式查找包含单个字符的括号中的单词

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

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

有什么建议吗?

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

+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]] 

模式击穿:

  • \[\[                     - 两个初始[[(你说对了!)
  • [^\[\]]*   - 有些东西比[]零次或多次
  • [\[\]]           - “中间”支架符号
  • [^\[\]]*   - 有些东西比[]零次或多次
  • \]\]                   - 双合]](一个你想通了也一样)
1

如果你想要营造的是在双括号,如果你不在乎是否有围绕单一支架等非括号字符,请尝试:

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

否则,如果必须有各地最里面的支架至少一个非括号字符,改变星号来加分,又名:

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

-2

术语支架有点超负荷,但我认为你要匹配的字符串形式:

[某些[事物]

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

模式。matches()是一个静态方法,对于匹配返回true,否则为false

+1

'[]'=括号,'{}'=大括号,'()'=圆括号:在软件世界里没有什么让人困惑的事情,它一直是这样的。此外,此模式不符合要求'。*'会匹配'['或']'以及您必须排除它们。 –

+0

为了公平起见,我听说'{}'被称为“大括号”。但是,不合格的“括号”总是意味着'[]'。 – 2011-09-02 19:55:26

+0

'<=尖括号,'['=方括号,'{'偶尔被称为大括号。这个问题的原始发布没有提供一个例子,所以我说明了我的假设。 – Timulus

相关问题