在T-SQL我已经使用NEWID()函数生成了UNIQUEIDENTIFIER。例如:如何评估正则表达式OR运算符
723952A7-96C6-421F-961F-80E66A4F29D2
然后,所有的破折号(-
)被删除,它看起来像这样:
723952A796C6421F961F80E66A4F29D2
现在,我需要使用以下格式xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
把上面的字符串为有效UNIQUEIDENTIFIER
并再次设置破折号。
要做到这一点,我使用SQL CLR
实现这一^.{8}|.{12}$|.{4}
正则表达式的C#
RegexMatches
功能,给了我这样的:
SELECT *
FROM [dbo].[RegexMatches] ('723952A796C6421F961F80E66A4F29D2', '^.{8}|.{12}$|.{4}')
使用上面,我可以很容易地重新建造一个正确UNIQUEIDENTIFIER
但我想知道如何在正则表达式中对OR
运算符进行评估。例如,以下将不起作用:
SELECT *
FROM [dbo].[RegexMatches] ('723952A796C6421F961F80E66A4F29D2', '^.{8}|.{4}|.{12}$')
是可以肯定的是,第一个正则表达式将开始和字符串,那么其他值结束第一相匹配,并且总是返回按此顺序匹配(如果例如96C6
与421F
匹配,我将遇到问题)。
此外,其原因'^ {8} |。{4} | {12} $'返回四个,而不是过去的12块是由于这样的事实使用匹配的第一个或(|)'值,**不是**最合格的。正则表达式解析器在看到'。{12} $'之前就会看到'。{4}',并且这样就可以在四边形中匹配它们。 –
@EBrown,这种情况是复杂应用程序的一部分。我无法改变事情的完成方式。只需要找到一种方法来处理这种情况。 – gotqn
@EBrown,那么它总是按顺序匹配'OR'块? – gotqn