gpt4 book ai didi

c# - 如何评估正则表达式 OR 运算符

转载 作者:太空狗 更新时间:2023-10-29 21:27:18 25 4
gpt4 key购买 nike

T-SQL 我生成了 UNIQUEIDENTIFIER使用 NEWID()功能。例如:

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}')

enter image description here

使用上面的方法,我可以轻松地再次构建一个正确的 UNIQUEIDENTIFIER 但我想知道 OR 运算符是如何在正则表达式中求值的。例如,以下将不起作用:

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

enter image description here

是否确定第一个正则表达式将首先匹配字符串的开头和结尾,然后是其他值,并且始终按此顺序返回匹配项(例如,96C6421F 之后匹配)。

最佳答案

如果您对使用 | alternation operator 时发生的情况感兴趣,答案很简单:正则表达式引擎从处理表达式和输入字符串。

以您拥有的模式为例,^.{8}|.{12}$|.{4} 从左侧开始检查输入字符串,并检查 ^.{8} - 前 8 个字符。找到他们,这是一场比赛。然后,继续查找带有 .{12}$ 的最后 12 个字符,再次匹配。然后,匹配任何 4 个字符的字符串。

Regular expression visualization

Debuggex Demo

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

Regular expression visualization

Debuggex Demo

关于c# - 如何评估正则表达式 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30531490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com