Las expresiones regulares permiten especificar un patrón para una búsqueda compleja.
    MySQL usa la implementación de expresiones regulares de Henry
    Spencer, que es conforme con POSIX 1003.2. Ver
    Apéndice B, Credits. MySQL usa la versión extendida para
    soportar operaciones de concordancia de patrones, a través del
    operador REGEXP en sentencias SQL. Ver
    Sección 3.3.4.7, “Coincidencia de patrones”.
  
    Este apéndice es un resumen, con ejemplos, de caracteres especiales
    y constructores que se pueden utilizar en MySQL para las operaciones
    REGEXP. No contiene todos los detalles que se
    pueden encontrar en la página del manual de
    regex(7) de Henry Spencer. Dicho manual se
    incluye en el código fuente de MySQL, en el archivo
    regex.7 dentro del directorio
    regex.
  
    Una expresión regular describe una serie de cadenas. La expresión
    regular más simple es aquella que no tiene caracteres especiales en
    su interior. Por ejemplo, la expresión regular
    hola concuerda con hola y nada
    más.
  
    Una expresión regular no trivial usa ciertos constructores
    especiales, que pueden concordar más de en una cadena. Por ejemplo,
    la expresión regular hello|word concuerda tanto
    con la cadena hello como con la cadena
    word.
  
    Un ejemplo más complicado: la expresión regular
    B[an]*s concuerda con las cadenas
    Bananas, Baaaaas,
    Bs, y cualquier otra cadena que comience con una
    B, termine con unas y contenga
    cualquier número de caracteres a o
    n entre ellas.
  
    Una expresión regular para el operador REGEXP
    puede utilizar cualquiera de los siguientes caracteres especiales y
    constructores:
  
        ^
      
que concuerda con el inicio de la cadena.
mysql> SELECT 'fo\nfo' REGEXP '^fo$'; -> 0 mysql> SELECT 'fofo' REGEXP '^fo'; -> 1
        $
      
que concuerda con el final de la cadena.
mysql> SELECT 'fo\no' REGEXP '^fo\no$'; -> 1 mysql> SELECT 'fo\no' REGEXP '^fo$'; -> 0
        .
      
que concuerda con cualquier carácter (incluyendo el retorno de carro y la nueva línea).
mysql> SELECT 'fofo' REGEXP '^f.*$'; -> 1 mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$'; -> 1
        a*
      
        que concuerda con cualquier secuencia de cero o más caracteres
        a.
mysql> SELECT 'Ban' REGEXP '^Ba*n'; -> 1 mysql> SELECT 'Baaan' REGEXP '^Ba*n'; -> 1 mysql> SELECT 'Bn' REGEXP '^Ba*n'; -> 1
        a+
      
        que concuerda con cualquier secuencia de uno o más caracteres
        a.
mysql> SELECT 'Ban' REGEXP '^Ba+n'; -> 1 mysql> SELECT 'Bn' REGEXP '^Ba+n'; -> 0
        a?
      
        que concuerda con cero o un carácter a.
mysql> SELECT 'Bn' REGEXP '^Ba?n'; -> 1 mysql> SELECT 'Ban' REGEXP '^Ba?n'; -> 1 mysql> SELECT 'Baan' REGEXP '^Ba?n'; -> 0
        de|abc
      
        que concuerda tanto con la secuencia de como
        con abc.
mysql> SELECT 'pi' REGEXP 'pi|apa'; -> 1 mysql> SELECT 'axe' REGEXP 'pi|apa'; -> 0 mysql> SELECT 'apa' REGEXP 'pi|apa'; -> 1 mysql> SELECT 'apa' REGEXP '^(pi|apa)$'; -> 1 mysql> SELECT 'pi' REGEXP '^(pi|apa)$'; -> 1 mysql> SELECT 'pix' REGEXP '^(pi|apa)$'; -> 0
        (abc)*
      
        que concuerda con cero o más instancias de la secuencia
        abc.
mysql> SELECT 'pi' REGEXP '^(pi)*$'; -> 1 mysql> SELECT 'pip' REGEXP '^(pi)*$'; -> 0 mysql> SELECT 'pipi' REGEXP '^(pi)*$'; -> 1
        {1}, {2,3}
      
        La notación {n} o {m,n}
        provee una manera más general de escribir expresiones regulares
        que concuerden con varias instancias del átomo anterior (o
        “pieza”) del patrón. m y
        n son enteros.
      
            a*
          
            Puede escribirse como a{0,}.
          
            a+
          
            Puede escribirse como a{1,}.
          
            a?
          
            Puede escribirse como a{0,1}.
          
        Para ser más preciso, a{n} concuerda
        exactamente con n instancias de
        a. a{n,} concuerda con
        n o más instancias de a.
        a{m,n} concuerda con entre
        m y n (inclusive)
        instancias de a.
      
        m y n deben estar en el
        rango desde 0 hasta
        RE_DUP_MAX (255 por defecto). Si se
        especifican tanto m como
        n, m debe ser menor o
        igual que n.
      
mysql> SELECT 'abcde' REGEXP 'a[bcd]{2}e';              -> 0
mysql> SELECT 'abcde' REGEXP 'a[bcd]{3}e';              -> 1
mysql> SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';           -> 1
        [a-dX], [^a-dX]
      
        Concuerda con cualquier caracter que sea (o no sea, si se
        utiliza ^ ) uno de los siguientes: a,
        b, c, d
        o X. Un carácter - entre
        dos caracteres distintos forma un rango que concuerda con
        cualquier carácter entre el primero y el segundo. Por ejemplo,
        [0-9] concuerda con cualquier dígito
        decimal. Para incluir un carácter ] literal,
        debe estar precedido inmediatamente por un corchete abierto
        [. Para incluir un carácter
        - literal , debe estar al principio o al
        final. Cualquier carácter que no tenga un significado especial,
        concuerda sólo consigo mismo si está dentro de un par de
        [].
      
mysql> SELECT 'aXbc' REGEXP '[a-dXYZ]'; -> 1 mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]$'; -> 0 mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]+$'; -> 1 mysql> SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$'; -> 0 mysql> SELECT 'gheis' REGEXP '^[^a-dXYZ]+$'; -> 1 mysql> SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$'; -> 0
        [.characters.]
      
        Dentro de una expresión de corchetes (escrita usando
        [ y ]), concuerda con la
        sencuencia de caracteres expresada.
        characters es cualquier carácter simple o su
        nombre de carácter como newline. Se puede
        encontrar la lista completa de nombres de caracteres en el
        archivoregexp/cname.h.
      
mysql> SELECT '~' REGEXP '[[.~.]]'; -> 1 mysql> SELECT '~' REGEXP '[[.tilde.]]'; -> 1
        [=character_class=]
      
        Dentro de una expresión de corchetes (escrita usando
        [ y ]),
        [=character_class=] representa una clase de
        equivalencia. Concuerda con cualquier carácter con el mismo
        valor de comparación. Por ejemplo, si o y
        (+) son miembros de una clase equivalente,
        entonces [[=o=]],
        [[=(+)=]], y [o(+)] son
        todos sinónimos. Una clase equivalente no puede utilizarse como
        el final de un rango.
      
        [:character_class:]
      
        Dentro de una expresión de corchetes (escrita usando
        [ y ]),
        [:character_class:] representa una clase de
        caracteres que concuerda con todos los caracteres pertenecientes
        a esa clase. Los nombres de clases estándar son:
      
| alnum | Caracteres alfanumericos | 
| alpha | Caracteres Alfabéticos | 
| blank | Caracteres espacios en blanco | 
| cntrl | Caracteres de Control | 
| digit | Caracteres Dígitos | 
| graph | Caracteres gráficos | 
| lower | Caracteres alfabéticos en minúsculas | 
| print | Caracteres gráficos o espacios | 
| punct | Caracteres de puntación | 
| space | Espacio, tabulador, nueva línea y retorno de carro | 
| upper | Caracteres alfabéticos en mayúsculas | 
| xdigit | Caracteres dígitos en hexadecimal | 
        Estos nombres representan las clases de caracteres definidas en
        ctype(3). Una localización particular
        pudiera proveer otros nombres de clases. Una clase de caracteres
        no se puede utilizar como final de un rango.
      
mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+'; -> 1 mysql> SELECT '!!' REGEXP '[[:alnum:]]+'; -> 0
        [[:<:]], [[:>:]]
      
        Estos marcadores representan limitadores de palabras. Concuerdan
        con el inicio y el final de palabras, respectivamente. Una
        palabra es una secuencia de caracteres de palabra que no son
        precedidos ni seguidos por caracteres de palabra. Un carácter
        de palabra es un carácter alfanumerico en la clase
        alnum o un guión bajo
        (_).
      
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1 mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -> 0
    Para utilizar en una expresión regular un carácter especial
    literalmente, precédalo con dos barras invertidas (\). El parser de
    MySQL interpreta las barras invertidas, y la biblioteca de
    expresiones regulares interpreta el resto. Por ejemplo, para
    concordar con la cadena 1+2, que contiene el
    carácter especial +, sólo la última de las
    siguientes expresiones regulares es correcta:
  
mysql> SELECT '1+2' REGEXP '1+2'; -> 0 mysql> SELECT '1+2' REGEXP '1\+2'; -> 0 mysql> SELECT '1+2' REGEXP '1\\+2'; -> 1
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

