Expresión Preg_match para encontrar código en una cadena

Cadenas de ejemplo:

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

Necesito extraer los códigos (10FF100 y GAPCJ20).

Estaba tratando de crear un preg_match para encontrar "código de cupón" y "código de cupón:" y extraer la frase o palabra inmediatamente después. No tuve mucha suerte ni encontré la expresión reg.

¿Pueden algunos publicar el código correcto, por favor?

Gracias por la ayuda.

preguntado el 16 de mayo de 11 a las 18:05

6 Respuestas

Utilice este código 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]);
}

SALIDA

string(8) "10OFF100"
string(7) "GAPCJ20"

contestado el 16 de mayo de 11 a las 22:05

¿Por qué no solo \w en lugar de [^\W]? - Tim Pietzcker

Intente lo siguiente: /coupon code[:]? ([\w]*)/i

contestado el 16 de mayo de 11 a las 22:05

Mi intento:

<?php
if (preg_match('/coupon code:?\s+(.+)(\s+|$)/', $str, $matches)) {
  list(, $code) = $matches;
  echo $code;
}

contestado el 16 de mayo de 11 a las 22:05

Para su primera variante de uso

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

Para el segundo uso

Get $20 Off Auto Parts Order Over $150. Use Coupon code: (.*)

contestado el 16 de mayo de 11 a las 22:05

Creo que estos son demasiado específicos. - esclava

Luego defina cuáles son las partes estáticas de sus cadenas. Tal vez algo como: - Hiperbóreo

Lo hago a continuación.

preg_match('/[Cc]oupon code:?(\w+)/',$string,$match);

contestado el 16 de mayo de 11 a las 22:05

Esto coincidirá con opcional : con un "código" que se espera que consista en alfanumérico y numérico.

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

¿Con esto bastará?

Respuesta corta: no.

Entonces, ¿cómo hacerlo más eficiente? Bueno, lo mejor que puedes hacer es hacer coincidir una expresión regular con un diccionario de líneas que tiene muchos ejemplos y formatos que desea admitir. Luego, continúe refinando su expresión regular hasta que obtenga una que sea 98% confiable. Digo 98% porque probablemente te hayas dado cuenta de que nunca será perfecto ya que hay tantos:

  • Posibles errores ortográficos
  • Códigos de cupón con diferentes conjuntos de caracteres
  • Variación de oraciones y orden de palabras, es decir
    • 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!
    • ... todos estos fallarán con la expresión regular anterior

Respondido el 20 de junio de 20 a las 12:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.