我创建了以下用于匹配ISBN的SQL正则表达式模式:
CREATE RULE ISBN_Rule AS @value LIKE 'ISBN\x20(?=.{13}$)\d{1,5}([-])\d{1,7}\1\d{1,6}\1(\d|X)$'
我使用以下值作为测试数据;但是,数据没有提交:
ISBN 0 93028 923 4 | ISBN 1-56389-668-0 | ISBN 1-56389-016-X
我哪里错了?
答案 0 :(得分:6)
SQL Server中的LIKE
运算符不是正则表达式运算符。你可以做一些复杂的模式匹配,但它不是正常的正则表达式语法。
答案 1 :(得分:6)
您可以使用LIKE执行此操作。
您需要一些OR来处理不同的ISBN 10和13格式
对于上述字符串:
LIKE 'ISBN [0-9][ -][0-9][0-9][0-9][0-9][0-9][ -][0-9][0-9][0-9][ -][0-9X]'
答案 2 :(得分:4)
SQL Server 2005不支持开箱即用的REGEX表达式,您需要OLE自动化或CLR才能通过UDF提供该功能。
唯一支持的通配符是%(any)和_(一个),字符范围(或否定)匹配使用[]可选[^]。所以你的表达
'ISBN\x20(?=.{13}$)\d{1,5}([- ])\d{1,7}\1\d{1,6}\1(\d|X)$'
意味着范围[ - ]以及其他所有字面意义都非常奇怪。
答案 3 :(得分:1)
如果它分裂|并且doesen't剥离空格,它可能在ISBN之前缺少一个空格和/或之后(\ d | X)这里 $ ..而且,我怀疑这是问题,但[ - ]可能是[ - ]
编辑:好的,当你得到正则表达式lib / control时,请记住这一点。