Как создать группы регулярных выражений для замены? - PullRequest
1 голос
/ 13 января 2011

У меня есть образец строки:

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 группы.

Ответы [ 3 ]

2 голосов
/ 13 января 2011

попробуйте это:

$output = preg_replace(array('/Price: /s', '/SGD\$.+? /s'), '', $input);
2 голосов
/ 13 января 2011

Чтобы ответить на ваш конкретный вопрос: используйте |, чтобы условно сгруппировать их:

$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.

0 голосов
/ 13 января 2011

Вы пробовали отделить их от |

...