匹配变量项方程

时间:2015-01-05 04:46:54

标签: javascript php regex

我正在尝试开发一个正则表达式来匹配以下等式:

(Price+10%+100+200)
(Price+20%+200)
(Price+30%)
(Price+100)

(Price-10%-100-200)
(Price-20%-200)
(Price-30%)
(Price-100)

到目前为止我的正则表达式是......

/([(])+([P])+([r])+([i])+([c])+([e])+([+]|[-]){1}([\d])+([+]|[-])?([\d])+([%])?([)])/g

...,但它只匹配以下等式:

(Price+100+10%)
(Price+100+100)
(Price+200)
(Price-100-10%)
(Price-100-100)
(Price-200)

有人可以帮我理解如何让我的模式与提供的全套方程式相匹配吗?

注意:圆括号和' Price'是模式必须匹配的方程中的必须条件。

3 个答案:

答案 0 :(得分:1)

试试这个,它匹配问题中提供的所有输入字符串:

/\(Price([+-]\d+%?){1,3}\)/g

您可以在regex fiddle

中对其进行测试

注意事项:

  • 仅使用您要分组的括号。围绕单一可能性,固定数量匹配的括号(例如([P])不提供任何价值。
  • 使用可以匹配模式中某个位置的多个字符的字符类(使用[打开并使用]结束)(例如[+-]) 。单一可能性字符类(例如[P])同样没有提供任何价值。
  • 是的,字符类(通常)隐式地转义其中的正则表达式特殊字符(例如(中的[(]与字符类外的等效\(,但是只是转义正则表达式特殊字符(即按字面意思匹配),最好不要使用字符类并只是转义它们(例如\() - 除非多个字符在模式中的某个位置匹配(按照前面的注意事项)。
  • 量词{1}(几乎)总是无用的:放弃它。
  • 量词+表示"一个或多个"你可能知道的。但是,在您使用它的一系列情况下(即([(])+([P])+([r])+([i])+([c])+([e])+),它会匹配我怀疑您期望的许多值(例如((((((PPPrriiiicccceeeeee):基本上,不要过度使用它。请停止考虑您是否真的希望匹配模式中+适用的字符(类)或组的或更多
  • 要匹配没有任何正则表达式特殊字符(如Price)的文字字符串,只需在模式中的适当位置使用文字字符串 - 例如Price中的\(Price

答案 1 :(得分:1)

/\(Price[+-](\d)+(%)?([+-]\d+%?)?([+-]\d+%?)?\)/g

适用于http://www.regexr.com/

答案 2 :(得分:0)

/^[(Price]+\d+\d+([%]|[)])&/i

自担风险!