匹配变量项方程
Matching variable-term equations
我正在尝试开发一个正则表达式来匹配以下等式:
(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' 是方程式中必须匹配的模式。
/^[(Price]+\d+\d+([%]|[)])&/i
尝试风险自负!
试试这个,它匹配问题中提供的所有输入字符串:
/\(Price([+-]\d+%?){1,3}\)/g
您可以在 regex fiddle.
中进行测试
注意事项:
- 只在要分组的地方使用括号。围绕单一可能性、固定数量匹配的括号(例如
([P])
不提供任何值。
- 使用字符 classes(以
[
开始,以 ]
结束)用于 多个 可以匹配的字符模式(例如 [+-]
)。单一可能性字符 classes(例如 [P]
)同样不提供任何值。
- 是的,字符 classes(通常)在其中隐式转义正则表达式特殊字符(例如
[(]
中的 (
与字符 [= 外的等效 \(
56=]),但要 just 转义正则表达式特殊字符(即按字面匹配它们),最好不要使用字符 class 并转义它们(例如 \(
) – 除非多个字符应该在模式中的一个位置匹配(根据前面要注意的一点)。
- 量词
{1}
(几乎)总是没用:放弃它。
- 如您所知,量词
+
表示 "one or more"。但是,在您使用它的一系列情况下(即 ([(])+([P])+([r])+([i])+([c])+([e])+
),它会匹配许多我怀疑您期望的值(例如 ((((((PPPrriiiicccceeeeee
):基本上,不要过度使用它。停止考虑您是否真的要匹配 或多个 字符 (class) 或 +
在模式中应用的组。
- 要匹配没有任何正则表达式特殊字符(如
Price
)的文字字符串,只需在模式中的适当位置使用文字字符串 - 例如Price
在 \(Price
.
/\(Price[+-](\d)+(%)?([+-]\d+%?)?([+-]\d+%?)?\)/g
我正在尝试开发一个正则表达式来匹配以下等式:
(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' 是方程式中必须匹配的模式。
/^[(Price]+\d+\d+([%]|[)])&/i
尝试风险自负!
试试这个,它匹配问题中提供的所有输入字符串:
/\(Price([+-]\d+%?){1,3}\)/g
您可以在 regex fiddle.
中进行测试注意事项:
- 只在要分组的地方使用括号。围绕单一可能性、固定数量匹配的括号(例如
([P])
不提供任何值。 - 使用字符 classes(以
[
开始,以]
结束)用于 多个 可以匹配的字符模式(例如[+-]
)。单一可能性字符 classes(例如[P]
)同样不提供任何值。 - 是的,字符 classes(通常)在其中隐式转义正则表达式特殊字符(例如
[(]
中的(
与字符 [= 外的等效\(
56=]),但要 just 转义正则表达式特殊字符(即按字面匹配它们),最好不要使用字符 class 并转义它们(例如\(
) – 除非多个字符应该在模式中的一个位置匹配(根据前面要注意的一点)。 - 量词
{1}
(几乎)总是没用:放弃它。 - 如您所知,量词
+
表示 "one or more"。但是,在您使用它的一系列情况下(即([(])+([P])+([r])+([i])+([c])+([e])+
),它会匹配许多我怀疑您期望的值(例如((((((PPPrriiiicccceeeeee
):基本上,不要过度使用它。停止考虑您是否真的要匹配 或多个 字符 (class) 或+
在模式中应用的组。 - 要匹配没有任何正则表达式特殊字符(如
Price
)的文字字符串,只需在模式中的适当位置使用文字字符串 - 例如Price
在\(Price
.
/\(Price[+-](\d)+(%)?([+-]\d+%?)?([+-]\d+%?)?\)/g