我有这个示例字符串:
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个组合在一起,则找不到匹配项。
答案 0 :(得分: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
的出现次数。
答案 1 :(得分:2)
试试这个:
$output = preg_replace(array('/Price: /s', '/SGD\$.+? /s'), '', $input);
答案 2 :(得分:0)
你试过用|分开吗?