加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何计算正则表达式OR运算符

发布时间:2020-12-15 08:46:56 所属栏目:百科 来源:网络整理
导读:在T-SQL中,我使用 NEWID()函数生成了 UNIQUEIDENTIFIER.例如: 723952A7-96C6-421F-961F-80E66A4F29D2 然后,删除所有破折号( – ),它看起来像这样: 723952A796C6421F961F80E66A4F29D2 现在,我需要使用以下格式将上面的字符串转换为有效的UNIQUEIDENTIFIER格
在T-SQL中,我使用 NEWID()函数生成了 UNIQUEIDENTIFIER.例如:
723952A7-96C6-421F-961F-80E66A4F29D2

然后,删除所有破折号( – ),它看起来像这样:

723952A796C6421F961F80E66A4F29D2

现在,我需要使用以下格式将上面的字符串转换为有效的UNIQUEIDENTIFIER格式xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx并再次设置破折号.

为了实现这一点,我使用C#RegexMatches函数的SQL CLR实现与这个^.{8} |.{12} $|.{4}正则表达式给出了这个:

SELECT *
FROM [dbo].[RegexMatches] ('723952A796C6421F961F80E66A4F29D2','^.{8}|.{12}$|.{4}')

使用上面的内容,我可以轻松地再次构建一个正确的UNIQUEIDENTIFIER,但我想知道如何在正则表达式中计算OR运算符.例如,以下内容不起作用:

SELECT *
FROM [dbo].[RegexMatches] ('723952A796C6421F961F80E66A4F29D2','^.{8}|.{4}|.{12}$')

是否确定第一个正则表达式将首先匹配字符串的开头和结尾,然后是其他值,并且始终按此顺序返回匹配(例如,如果在461F之后匹配96C6,则会出现问题).

解决方法

如果您对使用 | alternation operator时会发生什么感兴趣,答案很简单:正则表达式引擎从左到右处理表达式.

以你所拥有的模式为例,^.{8} |.{12} $|.{4}开始检查左边的输入字符串,并检查^.{8} – 前8个字符.找到他们,这是一个匹配.然后,继续使用.{12} $查找最后12个字符,然后再次匹配.然后,匹配任何4个字符的字符串.

Debuggex Demo

接下来,你有^.{8} |.{4} |.{12} $.表达式再次从左向右解析,前8个字符首先匹配,但接下来,只匹配4个字符的序列,{12}将不会触发,因为会有.{4}匹配!

Debuggex Demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读