Preg_match выражение для поиска кода в строке - PullRequest
3 голосов
/ 16 мая 2011

Пример строки:

$string = "Buyer must enter coupon code 10OFF100 in shopping cart.";
$string = "Get $20 Off Auto Parts Order Over $150. Use Coupon code: GAPCJ20";

Мне нужно извлечь коды (10FF100 и GAPCJ20).

Я пытался создать купон preg_match для поиска "код "и" код купона: "и сразу после этого извлеките фразу или слово.Мне не повезло и я не нашел выражения reg.

Может кто-нибудь опубликовать правильный код, пожалуйста.

Спасибо за помощь.

Ответы [ 6 ]

1 голос
/ 16 мая 2011

Используйте этот код php:

$arr = array("Buyer must enter coupon code 10OFF100 in shopping cart.", "Get $20 Off Auto Parts Order Over $150. Use Coupon code: GAPCJ20");
foreach ($arr as $s) {
   preg_match('~coupon code\W+(\w+)~i', $s, $m);
   var_dump($m[1]);
}

OUTPUT

string(8) "10OFF100"
string(7) "GAPCJ20"
0 голосов
/ 16 мая 2011

Я делаю ниже.

preg_match('/[Cc]oupon code:?(\w+)/',$string,$match);
0 голосов
/ 16 мая 2011

Для первого варианта используйте

Buyer must enter coupon code ([^ ]*) in shopping cart.

Для второго использования

Get $20 Off Auto Parts Order Over $150. Use Coupon code: (.*)
0 голосов
/ 16 мая 2011

Моя попытка:

<?php
if (preg_match('/coupon code:?\s+(.+)(\s+|$)/', $str, $matches)) {
  list(, $code) = $matches;
  echo $code;
}
0 голосов
/ 16 мая 2011

Попробуйте следующее: /coupon code[:]? ([\w]*)/i

0 голосов
/ 16 мая 2011

Это будет соответствовать необязательно : с "кодом", который, как ожидается, будет состоять из букв и цифр.

/coupon code:? ([a-z0-9]+)/i

Подойдет ли это?

Краткий ответ: нет .

Так как же сделать его более эффективным?Лучше всего было бы сопоставить регулярное выражение со словарем строк , в котором есть много примеров и форматов, которые вы хотите поддерживать.Затем продолжайте совершенствовать свое регулярное выражение, пока не получите надежное на 98%.Я говорю 98%, потому что вы, вероятно, пришли к осознанию того, что оно никогда не будет идеальным, поскольку их так много:

  • Возможные ошибки написания
  • Коды купонов с использованием различных наборов символов
  • Вариация предложений и порядок слов, т. Е.
    • Free Coupon: Enter this code 8HFnF5
    • Code for coupon (7859NhF)
    • Coupons galore! Just put 646GH4 in your basket
    • Cupon code is 797gGh
    • Your code for free goodies is 4543G5
    • Add token "5479_G5t" to your basket for free CD!
    • ... все они завершатся с помощью приведенного выше регулярного выражения
...