2014-02-18 72 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