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); 

しかし、どうやらそれは機能していません。

一度に 1 つのグループを置き換えると機能します。しかし、一致する可能性のあるすべてのグループを単一のステートメントに置き換えることができるかどうかを知りたいです。

上記のパターンに基づいて一致を表示しようと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

| で区切ってみましたか?

于 2011-01-13T02:46:33.990 に答える