2011-01-13 2 views
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 

У меня есть это выражение Thats должно соответствовать 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

является цена всегда в конце строки? смысл мы можем отрезать все после Price :? – dqhendricks

ответ

2

попробовать это:

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

это удалит «Цена:» и «SGD $ xxx», xxx будет чем-то перед следующим пространством. – dqhendricks

+0

потрясающий! это работает и его проще :) – resting

+0

@resting не проблема. рад помочь. кстати, вы можете принять ответ, нажав галочку рядом с ним. – dqhendricks

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, а также.

+0

безупречный! я не знал, что есть | условие для применения к группировкам. Любое имя для этого? Хотелось бы прочитать, если есть какие-то другие условия, которые мы можем применить :) – resting

+0

@resting: Не слишком уверен, я просто называю это своим именем (трубой). Вы можете прочитать другие метасимволы в синтаксисе PCRE здесь: http://www.php.net/manual/en/regexp.reference.meta.php – BoltClock

+0

спасибо. это полезно :) – resting

0

Вы пытались отделить их от?

+0

просто сделал, и он работает :) – resting

Смежные вопросы