c# - How regular expression OR operator is evaluated -
in t-sql have generated uniqueidentifier using newid() function. example:
723952a7-96c6-421f-961f-80e66a4f29d2 then, dashes (-) removed , looks this:
723952a796c6421f961f80e66a4f29d2 now, need turn string above valid uniqueidentifier using following format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx , setting dashes again.
to achieve this, using sql clr implementation of c# regexmatches function ^.{8}|.{12}$|.{4} regular expression gives me this:
select * [dbo].[regexmatches] ('723952a796c6421f961f80e66a4f29d2', '^.{8}|.{12}$|.{4}') 
using above, can build again correct uniqueidentifier wondering how or operator evaluated in regular expression. example, following not work:
select * [dbo].[regexmatches] ('723952a796c6421f961f80e66a4f29d2', '^.{8}|.{4}|.{12}$') 
is sure first regular expression first match start , end of string, other values , returning matches in order (i have issues if example, 96c6 matched after 421f).
if interested in happens when use | alternation operator, answer easy: regex engine processes expression left right.
taking pattern have example, ^.{8}|.{12}$|.{4} starts inspecting input string left, , checks ^.{8} - first 8 characters. finds them , match. then, goes on , finds last 12 characters .{12}$, , again there match. then, 4-character strings matched.

next, have ^.{8}|.{4}|.{12}$. expression again parsed left right, first 8 characters matched first, but next, 4-character sequences matched, .{12} won't ever fire because there .{4} matches!

Comments
Post a Comment