Domanda

Non ho questa stringa di esempio:

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

Vorrei rimuovere tutti i prezzi e cioè:

SGD$45.32  
Price: SGD$45.32  
SGD$45  

Ho questa espressione i thats supposti per abbinare i 3 gruppi:

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

Ma a quanto pare non il suo lavoro.

Funziona se sostituisco un solo gruppo alla volta. Ma, vorrei sapere se è possibile sostituire tutti i possibili gruppi di corrispondenza con una singola istruzione.

preg_match_all($pattern, $snippet, $matches); cercato di mostrare le partite in base al modello di cui sopra, ma non sono riscontrate se metto insieme tutti i 3 gruppi.

È stato utile?

Soluzione

provare questo:

$output = preg_replace(array('/Price: /s', '/SGD\$.+? /s'), '', $input);

Altri suggerimenti

Per rispondere alla tua domanda specifica: l'uso | al gruppo condizionale loro:

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

Questa sostituisce una stringa se corrisponde a qualsiasi di:

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

vorrei riscrivere l'intera espressione regolare in questo, però:

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

Questa sostituirebbe le occorrenze di Price: SGD$45 pure.

Hai provato separandoli con |? 'S

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top