正则表达式 - 寻找价格

时间:2012-12-22 18:20:55

标签: php regex

我正在制作一个正则表达式,它会以不同的格式获取价格,因为我不知道我将以哪种格式获取字符串所以我试图尽可能多地涵盖变体

这是我提出的

\$\s*?(\d+\.?\d*?)+|usd\s*?(\d+\.?\d*?)+|(\d+\.?\d*?)\s*?usd+|(\d+\.?\d*?)\s*?dollars?+|dollars?\s*?(\d+\.?\d*?)+|(\d+\.?\d*?)\s*?bucks?+|bucks?\s*?(\d+\.?\d*?)+

我已经尝试了上面几个例子,到目前为止并没有失败。

任何人都可以想出更好的方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

这里真正的答案是通过数据的规范化来实现。首先删除除数字,点和(如果您期望负值)连字符之外的每个字符。然后你将有一个可以用作数字的字符串。当您有一些可用的测试数据时,请在尝试编写正则表达式之前先尝试规范化。代码不仅易于编写,而且运行速度也更快!

答案 1 :(得分:0)

我建议对每个变体使用单独的表达式,并按顺序测试它们(最有可能是第一个),应用响应模式链。

优点是可维护性。当你需要支持一个新的变体时(考虑到你事先并不知道所有可能的衔接),它只是在链中添加另一个成员,而不是摆弄你现在建立的神秘复杂性。 / p>