Pregunta Expresiones regulares de SQL


Creé el siguiente patrón de expresiones regulares de SQL para hacer coincidir un ISBN:

CREATE RULE ISBN_Rule AS @value LIKE 'ISBN\x20(?=.{13}$)\d{1,5}([-])\d{1,7}\1\d{1,6}\1(\d|X)$'

Usé los siguientes valores como datos de prueba; Sin embargo, los datos no están siendo comprometidos:

ISBN 0 93028 923 4 | ISBN 1-56389-668-0 | ISBN 1-56389-016-X

¿Dónde estoy equivocado?


6
2018-02-06 05:55


origen


Respuestas:


Puedes hacer esto usando LIKE.

Necesitará algunas RUP para lidiar con los diferentes formatos de ISBN 10 y 13

Para las cadenas anteriores:

LIKE 'ISBN [0-9][ -][0-9][0-9][0-9][0-9][0-9][ -][0-9][0-9][0-9][ -][0-9X]'

6
2018-02-06 09:07



los LIKE operador en SQL Server no es un operador de expresiones regulares. Puede hacer algunas coincidencias de patrones complicadas, pero no es la sintaxis normal de expresiones regulares.

http://msdn.microsoft.com/en-us/library/ms179859.aspx


6
2018-02-06 06:19



SQL Server 2005 no admite expresiones REGEX listas para usar, necesitará Automatización OLE o CLR para proporcionar esa funcionalidad a través de una UDF.

Los únicos comodines admitidos son% (cualquiera) y _ (uno), y el rango de caracteres (o negación) coincide usando [] opcionalmente [^]. Entonces tu expresión

'ISBN\x20(?=.{13}$)\d{1,5}([- ])\d{1,7}\1\d{1,6}\1(\d|X)$'

Significa algo muy extraño con el rango [-] y todo lo demás es literal.


4
2018-02-06 06:14



Si se divide en | y no elimina espacios en blanco, probablemente le falte un espacio antes de ISBN y / o después (\ d | X) aquí $ .. Además, dudo que este sea el problema, pero [-] podría ser [-]

editar: bien, así que ten esto en cuenta cuando obtienes una regeneración / control de expresiones regulares.


1
2018-02-06 06:15