PHP Regex para encontrar palabras que contienen letras y números

Estoy trabajando en un script PHP que analiza anuncios, y quiero agregar una expresión regular para encontrar códigos especiales, que son palabras que pueden tener cualquier longitud, pero que consisten en letras y números en cualquier orden o longitud. Simplemente no estoy seguro de cuál sería la sintaxis adecuada para esto. He encontrado patrones que permiten letras o números, o requieren patrones específicos de letras y números, pero no una mezcla casi aleatoria.

Cualquier consejo sería muy apreciado.

Ejemplo: compre widgets con un 20 % de descuento con el código de cupón WID2010 antes del viernes

Idealmente, me gustaría detectar la palabra "WID010" y usarla para marcar el elemento para otros usos. Ese formato, sin embargo, no es necesariamente consistente. Todo lo que se puede predecir es que los códigos siempre constan de al menos una letra y un número, sin espacios ni puntuación.

preguntado el 03 de mayo de 12 a las 22:05

¿Puedes publicar algunos datos de muestra? -

presumiblemente un sujeto de longitud cero no está permitido? Dijiste cualquier longitud, pero sospecho que debe ser al menos un carácter. -

Se agregó una muestra. Como mínimo, la palabra objetivo sería de dos caracteres, una letra y un dígito. -

2 Respuestas

Tal código consiste o bien en

  • un conteo arbitrario (mínimo 1) de letras seguido de un número y un conteo arbitrario (mínimo 0) de letras y/o números
  • o un conteo arbitrario (mínimo 1) de números seguido de una letra y un conteo arbitrario (mínimo 0) de letras y/o números

escrito como un grupo de captura:

((?:[a-zA-Z]+[0-9]|[0-9]+[a-zA-Z])[a-zA-Z0-9]*)

Respondido el 21 de enero de 19 a las 21:01

algo como:

(?=\w*[a-z])(?=\w*[0-9])\w+

esto hace una búsqueda anticipada de una letra, luego un número y hace coincidir letras y números (palabra) con al menos uno de cada uno.

idea

contestado el 03 de mayo de 12 a las 22:05

no mira hacia adelante busca eso detrás de la captura? al igual que las búsquedas lookbehind antes de la captura? lookaround no cubre el contenido de captura en sí. Supongo que esto no funcionará según lo previsto, prueba esto por favor. - kaii

Lo he probado y funciona bien. Esto es similar a muchas expresiones regulares comunes para validar que las contraseñas tienen al menos una letra/número/símbolo/superior/inferior... etc. - jonathan kuhn

@Kaii la mirada hacia adelante/atrás/alrededor no captura el contenido en sí. pero el \w+ al final lo hace. la mirada alrededor significará que el \w+ al final debe tener al menos uno de [a-z] y [0-9] - jonathan kuhn

pues bien, +1. correcto ... depende de dónde coloque la afirmación de búsqueda, ya sea que abarque la captura real o no: kaii

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