Azure Kusto-分析Regex使用的位置-不区分大小写



我想要一个规范名称的数据集,并投影出用户名和域名。我有一个工作的例子,但我发现它只有在CN和DC大写时才有效。

| parse MemberName with "CN=" TargetUser "," * ",DC=" TargetDomain
| extend TargetDomain = replace_string(TargetDomain, ",DC=", ".")

但是,一旦CN或DC没有大写,则预期的列为空。所以我试图用来解决这个问题

| parse-where kind=regex flags=i MemberName with

但无法让抓捕小组工作。cn=(.*?),返回了整个字符串,我没有取得多大进展。

数据集

<Data Name="MemberName">CN=test one,OU=-Level11,OU=Level12,OU=Level13,DC=Locale1,DC=boing,DC=com</Data>
<Data Name="MemberName">cn=test two,OU=Level21,OU=Leve22,DC=Locale2,DC=com</Data>
<Data Name="MemberName">cn=test three,OU=Level31,OU=Level32,dc=Locale3,dc=Locale31,dc=Locale32,dc=com</Data>

预期输出

TargetUserTargetDomain
测试一个Locale1.boing.com
测试两个Locale2.com
测试三个Locale31.Locale32.com

您可以尝试使用RE2标志(特别是:i=case insensitive(:

datatable(input:string)
[
'<Data Name="MemberName">CN=test one,OU=Level11,OU=Level12,OU=Level13,DC=Locale1,DC=boing,DC=com</Data>',
'<Data Name="MemberName">cn=test two,OU=Level21,OU=Leve22,DC=Locale2,DC=com</Data>',
'<Data Name="MemberName">cn=test three,OU=Level31,OU=Level32,dc=Locale3,dc=Locale31,dc=Locale32,dc=com</Data>',
]
| parse kind=regex flags=Ui input with * "CN=" TargetUser "(,OU=[^,]+)*,DC=" TargetDomain "</Data>"
| project TargetUser, TargetDomain = replace_regex(TargetDomain, "(?i),dc=", ".")
TargetUserTargetDomain
测试一个Locale1.boing.com
测试两个Locale2.com
测试三个Locale3.Locate31.Locale32.com

以下任何一项都可以完成任务:

| parse kind=regex flags=iU MemberName with * ">CN=" CN ",OU=" OU ",DC=" DC "<"
| parse kind=regex flags=iU MemberName with * ">CN=" CN ",OU=.*" ",DC=" DC "<"
| parse kind=regex flags=iU MemberName with * ">CN=" CN ",.*" ",DC=" DC "<"

i=不区分大小写
U=无自由

如果你一个接一个地检查它们,你会发现它实际上是非常直观的

Fiddle

最新更新