2011-09-02 95 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

相關問題