1

我有这个示例字符串:

Image:  SGD$45.32 SKU: 3f3f3 dfdfd grg4t BP 6yhf Pack Size: 1000's Color: Green Price: SGD$45.32 SGD$45...

我想删除所有价格,即:

SGD$45.32  
Price: SGD$45.32  
SGD$45  

我有这个表达式应该匹配 3 个组:

$pattern = '/(Price.+\sSGD\$\d+\.\d{2})(SGD\$\d+\.\d{2})(SGD\$\d+)/';  
$new_snippet = preg_replace($pattern, '', $snippet); 

但显然它不起作用。

如果我一次更换一个组,它会起作用。但是,我想知道是否可以用单个语句替换所有可能的匹配组。

尝试preg_match_all($pattern, $snippet, $matches);根据上述模式显示匹配项,但如果我将所有 3 个组放在一起,则找不到匹配项。

4

3 回答 3

2

要回答您的具体问题:用于|有条件地对它们进行分组:

$pattern = '/(Price.+\sSGD\$\d+\.\d{2})|(SGD\$\d+\.\d{2})|(SGD\$\d+)/';  

如果它匹配任何一个子字符串,这将替换:

  • (Price.+\sSGD\$\d+\.\d{2})
  • (SGD\$\d+\.\d{2})
  • (SGD\$\d+)

不过,我会将整个正则表达式重写为:

$pattern = '/(?:Price.+\s*)?SGD\$\d+(?:\.\d{2})?/';  

这也将取代 的出现Price: SGD$45

于 2011-01-13T02:46:00.863 回答
2

试试这个:

$output = preg_replace(array('/Price: /s', '/SGD\$.+? /s'), '', $input);
于 2011-01-13T02:48:47.450 回答
0

您是否尝试将它们与 |'s 分开?

于 2011-01-13T02:46:33.990 回答