2013-01-03 54 views
-2

字符串裏面的零件能否請你幫我寫了下面的字符串正則表達式,

Hi $(abc) frnd $(xyz)

在本文中我想匹配不被$()。所以包圍所有單詞,在上面的字符串我想匹配Hifrnd

我試着用\$((.[^)]*.))但它匹配$(ABC)和$(XYZ)。但我想匹配符號外的那些

+1

我想在java中。我用\ $((。[^)] *。))試過,但是這與$(abc)$(xyz)匹配。但我想要倒置。 –

+0

@Lenymm - 我不確定它是否重複。 – Shai

+0

Actualy no。我認爲這是正確的答案。 – Lenymm

回答

1

您可以在Java中使用否定向後看嗎?這似乎在C#中工作(但你永遠無法知道100%的正則表達式!)下面的代碼

(?<!\$\([A-Za-z]*)[A-Za-z]+(?!\)) 
+1

Java支持負面後視,但不支持C#等可變寬度。你的正則表達式不能用Java編譯。 – nhahtdh

0

嘗試將打印所需的輸出。

public static void main(String[] args) 
{ 
    String text = "Hi $(abc) frnd $(xyz)"; 
    String[] textArr = text.split("\\$\\([^)]*\\)"); 

    for (String word : textArr) 
    { 
     System.out.println(word.trim()); 

    } 

} 
+0

讓我知道它是否工作或需要修改 –

1

您可以分割字符串成部分不包含$(...),或者您可以使用replaceAll功能刪除$(...)

// Raw regex: \$\([^)]+\) 

str.split("\\$\\([^)]+\\)"); 

str.replaceAll("\\$\\([^)]+\\)", "") 

然後你可以提取所有你想要的文本。正則表達式假定$(...)之間的文本不允許指定)。在$(abc$(crap)_outside等情況下,替換後只剩下。

它可以編寫一個正則表達式來挑出來的話而忽視$(...),通過最後一場比賽邊界\G,但它是簡單的,按上述:文本匹配之前刪除$(...)部分。