2014-02-18 144 views
0

在下面的字符串,我想現在我要匹配只有10.00正則表達式:捕獲捕獲組的唯一內部

Test(+$15.00)(dsfa) (+$10.00) 

\([\+|\-]\$(?:[0-9\.]+?)\)$ 

,但它抓住(+ $ 10.00) ,我想只有捕捉組的內部。

編輯: 我使用JS

+0

您沒有指定正則表達式的語言或變體,但試試這個:'\([\ + | \ - ] \ $?([0-9 \。] +?)\)$'。 – Turophile

+0

這也捕獲(+ $和) – Pixy

回答

4

的問題是,你還沒有定義在你的模式中捕獲組,你只有文字括弧是完全不同的。這會給你捕獲組的結果1 是與定義的簡單括號(...)

\([+-]\$([0-9.]+)\)$ 

(注意幾個字符不需要進行轉義,特別是所有的特殊字符被視爲字符類內的文字)。

在先例模式中,我使用捕獲組來提取我想要的整個結果。有可能只是你想要什麼用lookarounds(與正則表達式引擎,支持lookarounds)作爲整個結果得出:

(?<=\([+-]\$)[0-9.]+(?=\)$) 
+0

謝謝我不知道在某些情況下不需要逃脫。我在regexpal上嘗試過RegEx,它仍然包含(+ $和)在捕獲中。 – Pixy

+0

@RoxanneCourchesne:我建議你用一個'print_r($ match);'在php中編寫完整的代碼。您將更好地瞭解如何使用捕獲組。 –

+0

對不起,我忘了提及我正在使用JS,所以我不能使用後面的外觀。感謝提示,我會試一試。 – Pixy

1

它使用捕獲組時,很容易在JavaScript中。測試函數的返回值將是一個數組,其中元素0是完全捕獲,元素1是您的目標結果。

str = "Test(+$15.00)(dsfa) (+$10.00)" 
matches = str.match(/(?:[+-]\$)(\d+\.\d\d)(?:\))$/) 
result = matches[1] 

matches這裏將是["+$10.00)", "10.00"]result"10.00"

+0

謝謝你的回答,我意識到在卡西米爾的回答之後,regexpal正在對我說謊。雖然你的回答是正確的,但我會接受卡西米爾的事業,他有耐心帶我度過我的錯誤;) – Pixy