在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